gpt4 book ai didi

C# Bitblit 从 Bitmap 到控制(Compact Framework)

转载 作者:行者123 更新时间:2023-11-30 14:43:24 27 4
gpt4 key购买 nike

我曾使用 BitBlt 将屏幕截图保存到图像文件(.Net Compact Framework V3.5、Windows Mobile 2003 及更高版本)。工作正常。现在我想将位图绘制到窗体中。我可以使用 this.CreateGraphics().DrawImage(mybitmap, 0, 0),但我想知道它是否可以像以前一样与 BitBlt 一起使用,只是交换参数。所以我写道:

[DllImport("coredll.dll")]
public static extern int BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, uint dwRop);

(再往下:)

IntPtr hb = mybitmap.GetHbitmap();
BitBlt(this.Handle, 0, 0, mybitmap.Width, mybitmap.Height, hb, 0, 0, 0x00CC0020);

但表单保持纯白色。这是为什么?我犯的错误在哪里?感谢您的意见。干杯,大卫

最佳答案

this.Handle 是一个窗口句柄,而不是设备环境

this.Handle 替换为 this.CreateGraphics().GetHdc()

当然你需要销毁图形对象等...

IntPtr hb = mybitmap.GetHbitmap(); 
using (Graphics gfx = this.CreateGraphics())
{
BitBlt(gfx.GetHdc(), 0, 0, mybitmap.Width, mybitmap.Height, hb, 0, 0, 0x00CC0020);
}

另外 hb 是一个 Bitmap Handle 而不是 device context 所以上面的代码片段仍然无法工作。您需要从位图中创 build 备上下文:

    using (Bitmap myBitmap = new Bitmap("c:\test.bmp"))
{
using (Graphics gfxBitmap = Graphics.FromImage(myBitmap))
{
using (Graphics gfxForm = this.CreateGraphics())
{
IntPtr hdcForm = gfxForm.GetHdc();
IntPtr hdcBitmap = gfxBitmap.GetHdc();
BitBlt(hdcForm, 0, 0, myBitmap.Width, myBitmap.Height, hdcBitmap, 0, 0, 0x00CC0020);
gfxForm.ReleaseHdc(hdcForm);
gfxBitmap.ReleaseHdc(hdcBitmap);
}
}
}

关于C# Bitblit 从 Bitmap 到控制(Compact Framework),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2058375/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com