XDL Manual

XDL VideoView È°¿ë ³×¹ø°

(piXoneer XDL Tutorial)

 

 

 

 

 

 NXVideoView¸¦ È°¿ëÇÏ¿© µ¿¿µ»ó Ç÷¹À̾ ±¸ÇöÇØ º¾´Ï´Ù.

µ¿¿µ»óÀ» È®´ë/Ãà¼Ò, È­¸é Áß½ÉÀ̵¿, ¹à±âÁ¶Àý, ȸÀü, Flip,

´Ù¾çÇÑ ÇÊÅÍÀû¿ë, È­¸é ĸÃĸ¦ ±¸ÇöÇغ¾´Ï´Ù.

 

 

2017. 01.

¼öÁ¤ 2019. 02.

 

 

¸ñÂ÷

XDL VideoView È°¿ë ³×¹ø°... 1

1    »ç¿ëÇϱâ... 1

1.1    ¸Þ´º »ý¼ºÇϱâ... 1

1.2    ¸Þ´º¿¡ ´ëÇÑ ±â´É ±¸Çö... 1

 

 

 

 

1     »ç¿ëÇϱâ

º» Æ©Å͸®¾óÀ» °øºÎÇϱâ Àü¿¡ ¸ÕÀú ¡°XDL VideoView È°¿ë ¼¼¹ø°¡±¸¦ ¸ÕÀú ¼±ÇàÇϽñ⠹ٶø´Ï´Ù. XDL VideoView È°¿ë ¼¼¹ø°¿¡ À̾ ÁøÇàÇÕ´Ï´Ù.

1.1    ¸Þ´º »ý¼ºÇϱâ

1.1.1      [µµ±¸»óÀÚ]ÀÇ  MenuStripÀ» ¼±ÅÃÇÏ°í Form1ÀÇ »ó´ÜºÎ¿¡ µå·¡±×ÇÏ¿© À§Ä¡½ÃŲ´Ù.

 

1.1.2      ¸Þ´º¿¡ ´ÙÀ½°ú °°ÀÌ View, Enhance, Rotate, Flip, Shift, Algor, Capture¸¦ ÀÔ·ÂÇÏ¿© »ý¼ºÇÑ´Ù.

 

 

1.1.3     View-ZoomIn, View-ZoomOut±â´ÉÀ» Ãß°¡ÇÑ´Ù. ZoomIn, ZoomOutÀº ºñµð¿ÀÀÇ ºäÈ­¸éÀ» È®´ë½ÃÅ°°Å³ª Ãà¼Ò½ÃÅ°´Â ±â´ÉÀ» ´ã´çÇÑ´Ù.

 

 

1.1.4     Rotate ±â´ÉÀ» Ãß°¡ÇÑ´Ù. Rotate±â´ÉÀº È­¸éÀÇ È¸ÀüÀ» Á¶ÀýÇÏ´Â ±â´ÉÀ» ´ã´çÇÑ´Ù.

 

 

1.1.5     Enhance-Contrast, Enhance-Brightness, Enhance-Gamma ±â´ÉÀ» Ãß°¡ÇÑ´Ù. Contrast, BrightnessÀº °¢°¢ÀÇ Contrast³ª Brightness°ªÀ» º¯°æ½ÃÅ°°í, Gamma´Â GammaÀÇ À妽º¸¦ º¯È­½ÃÄѼ­ È­¸éÀÇ ¹à±â¸¦ Á¶ÀýÇÏ´Â ±â´ÉÀ» ´ã´çÇÑ´Ù.

 

 

1.1.6     Flip-VFlip, Flip-HFlip ±â´ÉÀ» Ãß°¡ÇÑ´Ù. Flip±â´ÉÀº È­¸éÀÇ ÁÂ/¿ì(HFlip)³ª »ó/ÇÏ(VFlip) ¸¦ µÚÁý¾î¼­ µµ½ÃÇÏ´Â ±â´ÉÀ» ´ã´çÇÑ´Ù.

 

 

1.1.7     Shift ±â´ÉÀ» Ãß°¡ÇÑ´Ù. Shift±â´ÉÀº È­¸éÀ» ƯÁ¤ °ª¸¸Å­ À̵¿½ÃÅ°´Â ±â´ÉÀ» ´ã´çÇÑ´Ù.

 

 

1.1.8     Algorithm ±â´ÉÀ» Ãß°¡ÇÑ´Ù.  Algorithm±â´ÉÀº µµ½ÃµÇ´Â µ¿¿µ»ó¿¡ ´Ù¾çÇÑ ÇÊÅͱâ´ÉÀ» Àû¿ëÇÏ´Â ±â´ÉÀ» ´ã´çÇÑ´Ù. Edge Detection, HDR, Basso, Median, AverageÇÊÅ͸¦ ±¸¼ºÇÑ´Ù.

 

 

1.1.9     Capture ±â´ÉÀ» Ãß°¡ÇÑ´Ù. ÇöÀç µµ½ÃµÇ´Â Frame°ú ºñµð¿ÀÀÇ Ã¹¹ø° FrameÀ» Capture ĸÃÄÇؼ­ ÀúÀåÇÏ´Â ±â´ÉÀ» ±¸ÇöÇÑ´Ù.

 

 

 

1.2    ¸Þ´º¿¡ ´ëÇÑ ±â´É ±¸Çö

1.2.1     View¿¡ ´ëÇÑ ±â´ÉÀ» ±¸ÇöÇÑ´Ù. ºñµð¿À¿¡ ´ëÇÑ È­¸é È®´ë/Ãà¼Ò¿¡ ´ëÇÑ ±â´ÉÀ» ±¸ÇöÇÑ´Ù.

// ZoomIn ¸Þ´º ¾ÆÀÌÅÛ Å¬¸¯ ½Ã È£ÃâµÇ´Â À̺¥Æ® ÇÔ¼ö
private void zoomInToolStripMenuItem_Click(object sender, EventArgs e)
{
    XVertex2d VideoScale = nxVideoView1.Scale;

    if (VideoScale.x > 0)
    {
        if (VideoScale.x >= 2.0) return;
    }
    else
    {
        if (VideoScale.x <= -2.0) return;
    }

    if (VideoScale.y > 0)
    {
        if (VideoScale.y >= 2.0) return;
    }
    else
    {
        if (VideoScale.y <= -2.0) return;
    }

    if (VideoScale.x > 0) VideoScale.x += 0.2; else VideoScale.x -= 0.2;
    if (VideoScale.y > 0) VideoScale.y += 0.2; else VideoScale.y -= 0.2;

    nxVideoView1.Scale = VideoScale;
}

// ZoomOut ¸Þ´º ¾ÆÀÌÅÛ Å¬¸¯ ½Ã È£ÃâµÇ´Â À̺¥Æ® ÇÔ¼ö
private void zoomOutToolStripMenuItem_Click(object sender, EventArgs e)
{
    XVertex2d VideoScale = nxVideoView1.Scale;

    if (VideoScale.x > 0)
    {
        if (VideoScale.x < 0.5) return;
    }
    else
    {
        if (VideoScale.x > -0.5) return;
    }

    if (VideoScale.y > 0)
    {
        if (VideoScale.y < 0.5) return;
    }
    else
    {
        if (VideoScale.y > -0.5) return;
    }

    if (VideoScale.x > 0) VideoScale.x -= 0.2; else VideoScale.x += 0.2;
    if (VideoScale.y > 0) VideoScale.y -= 0.2; else VideoScale.y += 0.2;

    nxVideoView1.Scale = VideoScale;
}

 

1.2.2     Enhance¿¡ ´ëÇÑ ±â´ÉÀ» ±¸ÇöÇÑ´Ù. ºñµð¿À¿¡ ´ëÇÑ È­¸é ¹à±â Á¶Àý¿¡ ´ëÇÑ ±â´ÉÀ» ±¸ÇöÇÑ´Ù.

// Àç»ýµÇ°í ÀÖ´Â µ¿¿µ»óÀÇ  Contrast Á¶Àý
private void contrast02ToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxVideoView1.FilterType = eVideoFilterType.CBS;
    nxVideoView1.Contrast += 0.2f;
}

// Àç»ýµÇ°í ÀÖ´Â µ¿¿µ»óÀÇ  Contrast Á¶Àý
private void contrast02ToolStripMenuItem1_Click(object sender, EventArgs e)
{
    nxVideoView1.FilterType = eVideoFilterType.CBS;
    nxVideoView1.Contrast -= 0.2f;
}

// Àç»ýµÇ°í ÀÖ´Â µ¿¿µ»óÀÇ  Brightness Á¶Àý
private void brightness02ToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxVideoView1.FilterType = eVideoFilterType.CBS;
    nxVideoView1.Brightness += 0.2f;
}

// Àç»ýµÇ°í ÀÖ´Â µ¿¿µ»óÀÇ  Brightness Á¶Àý
private void brightness02ToolStripMenuItem1_Click(object sender, EventArgs e)
{
    nxVideoView1.FilterType = eVideoFilterType.CBS;
    nxVideoView1.Brightness -= 0.2f;
}

// Àç»ýµÇ°í ÀÖ´Â µ¿¿µ»óÀÇ  Gamma Á¶Àý
private void gamma04ToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxVideoView1.FilterType = eVideoFilterType.Gamma;
    nxVideoView1.GammaFactor = 0.4f;
}

// Àç»ýµÇ°í ÀÖ´Â µ¿¿µ»óÀÇ  Gamma Á¶Àý
private void gamma10ToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxVideoView1.FilterType = eVideoFilterType.Gamma;
    nxVideoView1.GammaFactor = 1.0f;
}
    
// Àç»ýµÇ°í ÀÖ´Â µ¿¿µ»óÀÇ  Gamma Á¶Àý
private void gamma15ToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxVideoView1.FilterType = eVideoFilterType.Gamma;
    nxVideoView1.GammaFactor = 1.5f;
}

// Àç»ýµÇ°í ÀÖ´Â µ¿¿µ»óÀÇ  Gamma Á¶Àý
private void gamma22ToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxVideoView1.FilterType = eVideoFilterType.Gamma;
    nxVideoView1.GammaFactor = 2.2f;
}

// Àç»ýµÇ°í ÀÖ´Â µ¿¿µ»óÀÇ  Gamma Á¶Àý
private void gamma40ToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxVideoView1.FilterType = eVideoFilterType.Gamma;
    nxVideoView1.GammaFactor = 4.0f;
}

 

1.2.3     ȸÀü¿¡ ´ëÇÑ ±â´ÉÀ» ±¸ÇöÇÑ´Ù.

// Àç»ýµÇ°í ÀÖ´Â µ¿¿µ»óÀÇ È­¸éÀ» ȸÀü(45µµ)
private void rotate45ToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxVideoView1.Rotation = new XAngle(45);
}

// Àç»ýµÇ°í ÀÖ´Â µ¿¿µ»óÀÇ È­¸éÀ» ȸÀü(-45µµ)
private void rotate45ToolStripMenuItem1_Click(object sender, EventArgs e)
{
    nxVideoView1.Rotation = new XAngle(-45);
}

// Àç»ýµÇ°í ÀÖ´Â µ¿¿µ»óÀÇ È­¸éÀ» ȸÀü(0µµ)
private void rotate0ToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxVideoView1.Rotation = new XAngle(0);
}

 

1.2.4     Flip¿¡ ´ëÇÑ ±â´ÉÀ» ±¸ÇöÇÑ´Ù.

// µ¿¿µ»ó È­¸éÀ» ¼öÁ÷ ¹æÇâÀ¸·Î Flip
private void vFlipToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxVideoView1.Scale = new XVertex2d(nxVideoView1.Scale.x, nxVideoView1.Scale.y * -1);
}

// µ¿¿µ»ó È­¸éÀ» ¼öÆò ¹æÇâÀ¸·Î Flip
private void hFlipToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxVideoView1.Scale = new XVertex2d(nxVideoView1.Scale.x * -1, nxVideoView1.Scale.y);
}

 

1.2.5     ºñµð¿À ¿µ»óó¸® ´ëÇÑ ±â´ÉÀ» ±¸ÇöÇÑ´Ù.

private void edgeDetectionToolStripMenuItem_Click(object sender, EventArgs e)
{
    // Shader¸¦ ÅëÇØ Edge ÇÊÅ͸¦ ¼³Á¤
    nxVideoView1.FilterType = eVideoFilterType.Edge;
}

private void hDRToolStripMenuItem_Click(object sender, EventArgs e)
{
    // Shader¸¦ ÅëÇØ HDR ÇÊÅ͸¦ ¼³Á¤
    nxVideoView1.FilterType = eVideoFilterType.HDR;
}

private void bassoToolStripMenuItem_Click(object sender, EventArgs e)
{
    // Shader¸¦ ÅëÇØ Basso ÇÊÅ͸¦ ¼³Á¤
    nxVideoView1.FilterType = eVideoFilterType.Basso;
}

private void disableToolStripMenuItem_Click(object sender, EventArgs e)
{
    // ÇÊÅÍ ¼³Á¤ ÇØÁ¦
    nxVideoView1.FilterType = eVideoFilterType.None;
}

private void medianToolStripMenuItem_Click(object sender, EventArgs e)
{
    // Shader¸¦ ÅëÇØ Median ÇÊÅ͸¦ ¼³Á¤
    nxVideoView1.FilterType = eVideoFilterType.Median;
}

private void averageToolStripMenuItem_Click(object sender, EventArgs e)
{
    // Shader¸¦ ÅëÇØ Average ÇÊÅ͸¦ ¼³Á¤
    nxVideoView1.FilterType = eVideoFilterType.Average;
}

 

 

1.2.6     ºñµð¿À È­¸é ¿µ¿ª À̵¿ ´ëÇÑ ±â´ÉÀ» ±¸ÇöÇÑ´Ù.

private void shift200200ToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxVideoView1.Translation = new XVertex2d(200, 200);
}

private void shift200200ToolStripMenuItem1_Click(object sender, EventArgs e)
{
    nxVideoView1.Translation = new XVertex2d(-200, -200);
}

private void shift00ToolStripMenuItem_Click(object sender, EventArgs e)
{
    nxVideoView1.Translation = new XVertex2d(0, 0);
}

 

 

1.2.7     ºñµð¿À È­¸é ĸÃÄ¿¡ ´ëÇÑ ±â´ÉÀ» ±¸ÇöÇÑ´Ù.

// µµ½ÃµÇ°í ÀÖ´Â ÇöÀç ÇÁ·¹ÀÓÀ» ÀúÀåÇÑ´Ù. 
private void saveCurrentFrameToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (VS.video == null)
    {
        MessageBox.Show(this, "µ¿¿µ»óÀ» ¸ÕÀú Open Çϼ¼¿ä.", "¿À·ù");
        return;
    }

    // ÇÔ¼ö ÄÝ ½ÃÁ¡ÀÇ µµ½ÃµÈ ¿µ»óÀ» RGB Çü½ÄÀ¸·Î ´ã°í ÀÖ´Â 
// XFramePicture °´Ã¼¸¦ »ý¼ºÇÏ¿© ¹Ýȯ
    XFramePicture frameRGB = VS.videoChannel.GetRenderedFrameRGB();

    SaveFileDialog dlg = new SaveFileDialog();
    dlg.Title = "ÀúÀå °æ·Î¸¦ ¼³Á¤Çϼ¼¿ä";
    dlg.OverwritePrompt = true;
    dlg.Filter = "JPEG File(*.jpg)|*.jpg";

    if (dlg.ShowDialog() == DialogResult.OK)
    {
        string strError;
        string strFileName = dlg.FileName;

        // XFramePicture °´Ã¼ÀÇ È­¸é ÇÁ·¹ÀÓÀ» À̹ÌÁö·Î ÀúÀå
        // ÀúÀåÀ» À§ÇÑ ÆÄÀÏ Æ÷¸ËÀ¸·Î´Â TIFF, NITF, JPEG, BMP, JPEG2000 µî Áö¿ø
        bool bres = frameRGB.SaveFrame(strFileName, "JPEG", out strError, null);

        if (!bres)
        {
            MessageBox.Show(this, "ÇÁ·¹ÀÓ ÀúÀåÀÌ ½ÇÆÐÇÏ¿´½À´Ï´Ù.", "¿À·ù");
            return;
        }
    }
}

// µ¿¿µ»ó ÆÄÀÏÀÇ Ã¹¹ø° ÇÁ·¹ÀÓÀ» ÀúÀåÇÑ´Ù. 
private void saveFrameFirstFrameToolStripMenuItem_Click(object sender, 
EventArgs e)
{
    if (VS.video == null)
    {
        MessageBox.Show(this, "µ¿¿µ»óÀ» ¸ÕÀú Open Çϼ¼¿ä.", "¿À·ù");
        return;
    }

    SaveFileDialog dlg = new SaveFileDialog();
    dlg.Title = "ÀúÀå °æ·Î¸¦ ¼³Á¤Çϼ¼¿ä";
    dlg.OverwritePrompt = true;
    dlg.Filter = "JPEG File(*.jpg)|*.jpg";

    if (dlg.ShowDialog() == DialogResult.OK)
    {
        string strError;
        string strFileName = dlg.FileName;

        // XVidoeIO °´Ã¼¸¦ ÅëÇØ °¡Á®¿Â µ¿¿µ»ó ½ºÆ®¸²ÀÇ Ã¹¹ø° ÇÁ·¹ÀÓÀ» ¹Ýȯ
        XFramePicture frameRGB = m_videoIO.GetFirstFrameRGB(VS.videoFilePath,
 "XFFMPDRIVER", out strError);

        // XFramePicture °´Ã¼ÀÇ È­¸é ÇÁ·¹ÀÓÀ» À̹ÌÁö·Î ÀúÀå
        // ÀúÀåÀ» À§ÇÑ ÆÄÀÏ Æ÷¸ËÀ¸·Î´Â TIFF, NITF, JPEG, BMP, JPEG2000 µî Áö¿ø
        bool bres = frameRGB.SaveFrame(strFileName, "JPEG", out strError, null);

        if (!bres)
        {
            MessageBox.Show(this, "ÇÁ·¹ÀÓ ÀúÀåÀÌ ½ÇÆÐÇÏ¿´½À´Ï´Ù.", "¿À·ù");
            return;
        }
    }
}

1.2.8     [F5]Å°¸¦ ´­·¯ ÇÁ·Î±×·¥À» ½ÇÇà ÈÄ View, Enhance, Rotate, Flip, Algor, Shift, Capture Åø¹Ù¸¦ ´©¸£°í ÇϺΠ±â´ÉÀ» Å×½ºÆ® ÇÑ´Ù.