我的需求是这样的
想把一个png图片画在窗口里面,窗口的客户区本身也有背景。
所以我用了IImage接口,来把图片直接Draw上去,然后还会做一些其它的操作,因为Png图片是在Draw的时候解码的,所以速度太慢,很明显能看出来图片有点闪烁。因为要经常把这个图片往上面画。
所以我想把解码后的图片放到DC中,然后用这个DC往目标DC上画
方法就是这样的:
hdc = GetDC(hWnd);
hTempDC = CreateCompatibleDC(hdc);
hBitmap = CreateCompatibleBitmap(hdc, image.wdith, image.height);
SelectObject(hTempDC, hBitmap);
BitBlt(hTempDC, 0, 0, image.width, image.heigth, hdc, cx, cy, SRCCOPY); //将背景图提前保存到hTempDC中
iImage->Draw(hTempDC, &rt, NULL); //rt={0, 0, image.width, image.height};
这样操作之后,按理说,我的png图片应该按照透明的格式来画到了hTempDC上,而且应该可见的背景都能显示出来。
然后进行其它操作的时候,我都是直接操作的hTempDC,到最后,一次性的将hTempDC拷贝到hdc,即目标DC上。
虽然那个png图片能画出来,这个png图片是个圆形的图片,按理应该只显示圆形,然后四周都是窗口背景。但这个圆的外切矩形之内却是是黑色的。
不知道这种问题应该怎么解决??
谢谢!!!
------解决方案--------------------
我觉得可能是绘画的模式不太对。
------解决方案--------------------
png图片是个圆形的图片,但在内存中建立的bmp不是,复制的区域也不是,在画图之前,把内存中bmp先填充成你需要的颜色(比如用缺省的窗口背景颜色)而后在把png复制过去。
------解决方案--------------------
IImage::Draw是不是只能draw到rect里面呀,看传入的第二个参数感觉好像是这样。如果真的是这样的话,估计你这种方法不行。
------解决方案--------------------
GDI+不知道怎么用啊!做高级UI得学啊!要学的东西真多!
------解决方案--------------------
顶!
我也顺便打个广告,本人也有支持MAPINFO的.shp文件的地图的Windows mobile 5.0/6.0手机GIS地图软件,还有PC端的服务软件,可成套出售,可以完成以下功能:
1,通过GPRS上网连接后台服务端程序来实时传输在外工作的数据到后台数据库!
2,可以实时发回PDA的GPS信息,在后台地图上直接定位PDA用户的位置,也可以下发PDA的经纬度信息让PDA用户定位和跟踪其它PDA用户,了解自己与其它PDA的位置关系,起到定位和跟踪的作用!
3,可以发回PDA当前所在地名如在天河城附近等,实现在外面工作就知道在何时何地上班打卡的效果!
4,后台可以对PDA用户进行字管理,可以对在外面工作的PDA用户进行任务下发和任务管理如
PDA号码:13800138000
任务名称:测试线路
任务说明:主要是在天河北路一带的地下管线进行检测!
5,可以对PDA用户需要返回数据的属性进行后台配置,下发与管理如测试线路的属性模板:
//0-编辑属性(可多个) ; 1-下拉属性(可多个) ; 2-选择属性(可多个) ; 3-大文本编辑框(可以没有此属性,但有此属性时只能有一个) ; 4-列表属性(可以没有此属性,但有此属性时只能有一个)(属性0+属性1+属性2/2+属性2%2)<=28
name,名称,0,;beproject,所属项目,0,;type,类型,1,0:小-1:中-2:大;complete,完成,2,;remark,备注,3,;listbox,设备表,4,
6,可以实时上传文件到后台服务器,实时下载后台服务器的文件和实时更新PDA上客户端的系统!
7,可以实时采集和传输图像信息!
跟据您的需要,还可以增加其它功能!
------解决方案--------------------
我觉得问题在
iImage->Draw(hTempDC, &rt, NULL); //rt={0, 0, image.width, image.height};
LZ想要一个圆形的,结果draw了一个方形的.
下面的过程可以实现:
hdc = GetDC(hWnd);
hTempDC = CreateCompatibleDC(hdc);
hBitmap = CreateCompatibleBitmap(hdc, image.wdith, image.height);
SelectObject(hTempDC, hBitmap);
BitBlt(hTempDC, 0, 0, image.width, image.heigth, hdc, cx, cy, SRCCOPY); //将背景图提前保存到hTempDC中
hTempDC2 = CreateCompatibleDC(hdc);
hBitmap2 = CreateCompatibleBitmap(hdc, image.wdith, image.height);
SelectObject(hTempDC2, hBitmap2);
iImage->Draw(hTempDC2, &rt, NULL); //rt={0, 0, image.width, image.height};
TransparentBlt(hTempDC ,....hTempDC2,...RGB(0,0,0)