【问题标题】:Convert PictureBox image to bitmap将 PictureBox 图像转换为位图
【发布时间】:2016-02-05 21:25:14
【问题描述】:

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

代码如下:

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

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

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

【问题讨论】:

  • 如何在图片框中捕获并显示输出?
  • 我正在使用 Nitgen SDK,我能够捕获指纹输出并将其显示在图片框中。 DrawToBitmap() 给了我一个空白的位图图像
  • 我对 Nitgen SDK 没有任何经验,但这个问题 (stackoverflow.com/questions/14182487/…) 可能对您有所帮助。
  • 谢谢,但我已经看过那个帖子了。 Nitgen 工作正常。它的 picturebox.DrawToBitmap() 正在生成一个空白的 bmp 文件。
  • 如何将捕获的输出带入PictureBox? (另外:如果你有它,为什么不立即保存它?) - 我想不出另一个原因,你可能用CreateGraphics 对象将它绘制到Picturebox 上,这是错误的,像往常一样..

标签: c#


【解决方案1】:

PictureBox三个 层可以显示,PictureBox.DrawToBitmap 会将所有三个东西放入位图中:

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

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

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

这不起作用,因为它只会创建非持久图形。这些消失了,例如每个最小化恢复周期,并且不会从 DrawToBitmap 调用中调用

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

picFP.Image = yourCapturedImage;

更新 1 正如您现在透露的那样,您不会自己显示它,而只是将控制句柄交给外部代码objNitgen=picFP.Handle; 这同样适用:Nitgen 仅绘制 到表面上,结果是非持久性

在这种情况下,补救措施是

  • 截取结果的屏幕截图,然后根据该屏幕截图进行操作。 Here is a post 向您展示如何通过 screenshot..

  • 捕获控件
  • 或者你可能想检查一下 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 方法的情况下获取图像。

【讨论】:

  • 位图图像显示为白色(空白)。 FP 是在按钮单击事件上捕获的,该事件工作得非常好。那么我该怎么做:picFp.image=图片在图片框中可见
  • 为了测试我的假设做一个最小化-最大化循环!图像是否持续存在? - 我的链接中的屏幕截图代码显示为白色??
  • 查看我的最新更新!使用 DrawToBitmap 加上 Paint 事件对我不起作用,但应该可以传递位图的句柄..
  • 谢谢,我试过你的建议,保存的位图图像是黑色的,点击按钮时图片框中没有任何显示
  • 嗯,我们是在谈论使用GetHdcReleaseHdc 的最新版本吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多