我正在使用指纹模块,并能够在图片框(C#)中捕获和显示输出。现在picture.Image即使图片框显示图像也是null。所以我试图将图片框图像保存为bmp,然后将bmp分配给同一个图片框,以便Picturebox.image不为null。
以下是代码:
Bitmap bmp = new Bitmap(picFP.width, picFP.height);
picFP.DrawToBitmap(bmp, picFP.ClientRectangle);
bmp.Save("path", Imageformat.bmp);
picFP.image = bmp;
此处保存的位图图像为空白。可能是什么问题?
答案 0 :(得分:1)
PictureBox
可以显示三个图层,PictureBox.DrawToBitmap
会将所有三个内容放入位图中:
BackgroundImage
Image
Paint
事件如果你的位图是黑色的,那么你没有三个,或者你的最后一个都是黑色的。
从您的描述中,您似乎可以在PictureBox
中显示图像。
所以我假设你没有以正确的方式显示它,可能你这样做:
using (Graphics G = picFP.CreateGraphics())
G.DrawImage(yourCapturedImage, ..)
这不起作用,因为它只会创建非持久性图形。这些消失了,例如每个最小化 - 恢复周期,不会从DrawToBitmap
调用
如果您真的想将它绘制到PB的表面,请使用Paint
事件!但更自然的选择是直接设置PB的图像:
picFP.Image = yourCapturedImage;
更新1 正如您现在所揭示的那样,您不会自己显示它,只需将控制句柄赋予外部代码objNitgen=picFP.Handle;
同样适用:这是Nitgen只绘制< strong>表面,结果是非持久性。
在这种情况下,补救措施是
获取结果的屏幕截图,然后从中进行操作。 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方法的情况下获得图像。