c++ 拷贝位图

来源:百度知道 编辑:UC知道 时间:2024/06/03 03:53:06
请问如何将几幅位图绘制到一个临时DC中,在将临时DC里的所有图像拷贝到主DC hdc中,请给我个例子程序。

顺便问下我的为什么不行?
void Update()
{
HDC tempdc;
tempdc = CreateCompatibleDC(hdc);
for(int i = 0;i - 999;i++)
pictures[i].Draw(tempdc);/*我定义的一个绘图函数,没有问题。*/

SelectObject(hdc,tempdc);

BitBlt(hdc, 0, 0, 800, 600, tempdc, 0, 0, SRCCOPY);
DeleteDC(tempdc);
}

一楼说的那句没问题,相当于i<999,循环998次,执行999次。

问题出在SelectObject(hdc,tempdc); 上。

你不能在hdc上选中另一个dc,因为该函数第二个参数是:
hgdiobj
而tempdc不属于这个类型。

你说的“几幅位图绘制到一个临时DC中”我没大看明白,如果是几幅不同的位图希望粘贴到同一画面的不同地方,你应该使用LoadImage函数装载位图,然后通过SelectObject函数选中到tempdc中适当的位置,最后再用BitBlt图形变换到hdc中适当的位置。
但是,如果你的图片还有重叠,问题就挺复杂了。你必须建立一个UCHAR型数组,作为“像素暂存数组”,将位图句柄指向的位图像素全部拷贝到其中,再计算“透明度”——这么做的话,会使程序明显减慢速度,画面我保证有十分显眼的闪烁——这是因为GDI太慢了,不适合做复杂的图形图像操作。这可是DirectX的工作!!!

for(int i = 0;i - 999;i++)
这个.....