2015-11-05 138 views
-1

我正在使用指纹模块,并且能够在图片框(C#)中捕获并显示输出。现在picture.Image是null,即使picturebox显示图像。所以我试图将图片框图像保存为bmp,然后将该bmp分配给相同的图片框,以便Picturebox.image不为null。将PictureBox图像转换为位图

下面是代码:保存

Bitmap bmp = new Bitmap(picFP.width, picFP.height); 
picFP.DrawToBitmap(bmp, picFP.ClientRectangle); 

bmp.Save("path", Imageformat.bmp); 
picFP.image = bmp; 

这里的位图图像是空白。可能是什么问题?

+0

如何捕获并显示图片框中的输出? – jhmt

+0

我正在使用Nitgen SDK,我能够捕获指纹输出并将其显示在图片框中。 DrawToBitmap()给我一个空白的位图图像 – LDin

+0

我在Nitgen SDK中没有任何经验,但是这个问题(http://stackoverflow.com/questions/14182487/windowsform-picturebox-image-is-null-even-though- theres-an-image-shown-in-the-f)可能对您有所帮助。 – jhmt

回答

1

一个PictureBox有层它可以显示和PictureBox.DrawToBitmap会把所有的三件事为位图:

  • BackgroundImage
  • Image
  • 任何或从Paint事件创建图形

如果你r位图出来黑色,那么你没有三个,或者你最后一个都是黑色。 从您的描述看,好像你可以在PictureBox中显示图像。 所以我认为你不正确的方式显示出来,可能你做这样的:

using (Graphics G = picFP.CreateGraphics()) 
     G.DrawImage(yourCapturedImage, ..) 

这是行不通的,因为它只会造成非持久图形。这些消失与例如每个最小化 - 恢复周期并且不从DrawToBitmap调用

如果您确实想将其绘制到PB的表面上,请使用Paint事件!但更自然的选择将直接设置PB的形象:

picFP.Image = yourCapturedImage; 

更新1正如你现在表明,连你自己都不显示出来,而只是给控制手柄的外部代码objNitgen=picFP.Handle;相同适用:这是Nitgen只吸取到表面和结果是非持久

在这种情况下的补救办法是要么

  • 以结果的截图,然后从该工作。 Here is a post,告诉您如何通过截图捕获控制..

  • 或者你可能要检查是否Nitgen将直接绘制成位图..

对于这一点,你应该是一个句柄传递它不要PictureBox但是到了Bitmap代替:

private void button_Click(object sender, EventArgs e) 
{ 
    Bitmap bmp = new Bitmap(picFP.ClientSize.Width, picFP.ClientSize.Height); 
    Graphics G = Graphics.FromImage(bmp); 
    IntPtr dc= G.GetHdc(); 
    objNitgen = dc; 
    objNitgen.capture(); 
    G.ReleaseHdc(dc); 
    pictureBox1.Image = bmp; // now display.. 
    bmp.Save(yourfilename); // .. and/or save 
} 

更新2

您的评论指出,做手动截图也不会捕捉图像;所以看起来控制手柄只是用来像图像覆盖一样覆盖图像;如果是这种情况,我怀疑你可以在不使用其他更合适的Nitgen SDK方法的情况下获得图像。

+0

位图图像出现白色(空白)。 FP在一个按钮点击事件中捕获,该事件工作得非常好。所以我该如何做到这一点:picFp.image =图片中可见的图片 – LDin

+0

为了测试我的假设,做一个最小化 - 最大化循环!图像是否存在? - 它从我的链接中的屏幕截图代码中白色出来? – TaW

+0

查看我的最新更新!使用DrawToBitmap加上Paint事件不适用于我,但应该可以传递一个位图句柄。 – TaW