请教关于绘制位图的一个问题!

No9 2001-11-07 11:26:16
请问高手,在程序中包含了一个bmp资源[四周时黑色的边框],使用LoadBitmap()装入后,再使用Bitblt()绘制一个位图时,为什么总有一个黑边呀?
能否消除呢?即让这个黑色成为透明色。
...全文
253 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
No9 2001-11-11
  • 打赏
  • 举报
回复
各位,已经加过分了!
No9 2001-11-11
  • 打赏
  • 举报
回复
TO hao_yufei(星云):
谢谢你的指点!
也要谢谢其他各位老兄的指点!
hao_yufei 2001-11-10
  • 打赏
  • 举报
回复
以前做过,记不太清了,多试验几次定能成功,关键在于dwRop的设置和透明的原理。
hao_yufei 2001-11-10
  • 打赏
  • 举报
回复
要把背景变为透明,可以对要变为透明的部分进行两次异或操作。即Bitbtl的最后一个参数dwRop为R2_XORPEN,不过画出的位图颜色可能很乱。你可以按以下操作:
1。先做一个蒙板,即一个和要显示的图A同样大小的位图B,要显示的部分用黑色填充,其余部分为白色(用photoshop或其他图象处理软件很容易制作)。
2。A图和背景进and操作(R2_MASKPEN)
3。B图和第2步得到的图作or操作(R2_MERGEPEN)
4。A图和第3步得到的图作not操作(R2_NOT)
经过以上步骤即可得到透明背景的位图,可以用在简单的动画中。如果要做复杂的动画,建议使用DirectDraw,可以有效避免闪烁等副作用。
No9 2001-11-10
  • 打赏
  • 举报
回复
难度没有好心人了吗?
请好心人帮个忙吧!
No9 2001-11-09
  • 打赏
  • 举报
回复
怎么了,就没有人会了吗?
No9 2001-11-09
  • 打赏
  • 举报
回复
用 CImageList 类,是不是要转化成icon,然后输出这个icon呢?
这个方法我试过了,效果不太好,因为我这个程序是个需要连续移动的!
No9 2001-11-08
  • 打赏
  • 举报
回复
有这个函数吗?
我先查查看!
先谢了!
mousubin 2001-11-08
  • 打赏
  • 举报
回复
可用CImageList
No9 2001-11-08
  • 打赏
  • 举报
回复
怎么没有高手了吗?
这个问题应该不是很复杂的呀!
No9 2001-11-08
  • 打赏
  • 举报
回复
To nicolas:
这样不行呀!因为中间好比是个圆形的图像呢?怎么办?
nicolas 2001-11-08
  • 打赏
  • 举报
回复
你把bmp的一部分(指不包括黑色的那部分)绘出来,只要你计算好x,y,width,height就行了。
能够解决你的问题
No9 2001-11-08
  • 打赏
  • 举报
回复
To vcuser:
我试了一下,不行呀!
编译没有问题,但连接时出错了!
提示说:
--------------------Configuration: EatDragon - Win32 Debug--------------------
Linking...
PartSnake.obj : error LNK2001: unresolved external symbol __imp__TransparentBlt@44
Debug/EatDragon.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

EatDragon.exe - 2 error(s), 0 warning(s)
清泉ys 2001-11-07
  • 打赏
  • 举报
回复
怎么会有黑边?
No9 2001-11-07
  • 打赏
  • 举报
回复
抱歉,你还没有明白我的意思,我指的边框并不是指的实际的矩形边框,而是指的外部的黑色区域,因为位图一般都不会是整个全部的占满!
清泉ys 2001-11-07
  • 打赏
  • 举报
回复
让x,y参数等于边框宽厚度,nWidth-2x, nHeight-2y
No9 2001-11-07
  • 打赏
  • 举报
回复
我的底色是黑色的!
有什么关系吗?
coolarcher 2001-11-07
  • 打赏
  • 举报
回复
你的底色是啥?
vcuser 2001-11-07
  • 打赏
  • 举报
回复
其它常数和BitBlt都差不多.
vcuser 2001-11-07
  • 打赏
  • 举报
回复
BOOL TransparentBlt(
HDC hdcDest,
int nXOriginDest,
int nYOriginDest,
int nWidthDest,
int hHeightDest,
HDC hdcSrc,
int nXOriginSrc,
int nYOriginSrc,
int nWidthSrc,
int nHeightSrc,
UINT crTransparent
);
能使给出X,Y坐标点的颜色相同的颜色变为透明色
加载更多回复(1)

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧