使用BitBlt复制位图,出现显示黑色块的问题

我遇到这个问题两三次了,前面都是放着或者一不小心就好了大笑。今天我又遇到了,这此让我找到了问题的原因,主要还是创建DC对应的CBitmap是出了一个很小的问题。

 CDC bkDC;

 bkDC.CreateCompatibleDC (NULL);
 CDC picDC;
 picDC.CreateCompatibleDC(NULL);
 CBitmap keyBmp;
 bkDC.SelectObject(bkBmp); //这里的bkBmp是指向一个已经存好的图片

 //在背景图中根据矩形框进行截图,存入keyBmp中
  keyBmp.CreateCompatibleBitmap(&picDC,100,100);
  picDC.SelectObject(&keyBmp);
  picDC.BitBlt(0,0,100,100,&bkDC,0,0,SRCCOPY);


像上面这段代码,假如我们把创建位图的那句代码改下就会出现问题

keyBmp.CreateCompatibleBitmap(&picDC,100,100);改成keyBmp.CreateCompatibleBitmap(&pDC,100,100);

这个时候如果用BitBlt就会出现黑块的问题,所以我们创建兼容位图的时候要注意位图是与那个句柄兼容的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
下面是一个使用VB.NET执行位图复制操作的示例: ``` Imports System.Runtime.InteropServices Public Class Form1 Private Declare Auto Function BitBlt Lib "gdi32.dll" ( ByVal hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As Integer) As Boolean Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' 创建源位图 Dim bmpSrc As New Bitmap("D:\source.bmp") ' 创建目标位图 Dim bmpDest As New Bitmap(bmpSrc.Width, bmpSrc.Height) ' 获取源位图和目标位图的HDC Dim hdcSrc As IntPtr = Graphics.FromImage(bmpSrc).GetHdc() Dim hdcDest As IntPtr = Graphics.FromImage(bmpDest).GetHdc() ' 执行位图复制操作 BitBlt(hdcDest, 0, 0, bmpSrc.Width, bmpSrc.Height, hdcSrc, 0, 0, &HCC0020) ' 释放HDC Graphics.FromImage(bmpSrc).ReleaseHdc(hdcSrc) Graphics.FromImage(bmpDest).ReleaseHdc(hdcDest) ' 显示复制后的位图 PictureBox1.Image = bmpDest End Sub End Class ``` 在这个示例中,我们首先创建了一个源位图和一个空的目标位图,并获取它们的HDC。然后我们调用BitBlt函数,将源位图复制到目标位图中。最后,我们释放HDC并显示复制后的位图BitBlt函数的第一个参数是目标设备的HDC,第二个和第三个参数是目标矩形的左上角坐标,第四个和第五个参数是目标矩形的宽度和高度。第六个参数是源设备的HDC,第七个和第八个参数是源矩形的左上角坐标。最后一个参数指定了如何将源位图与目标位图组合。 在这个示例中,我们使用的组合模式是SRCCOPY,这意味着直接将源位图的像素复制到目标位图中。其他组合模式可以通过更改dwRop参数来实现不同的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值