|
|
先向各位前辈们打声招呼 @@
今天在实作合成图片的时候 思路有点被绊着
假设现在有图A 图B 我想把图S合成到图B内 所以在图A设定了透明色
我单纯地认为只要跑一个回圈 用判断式子每一个 这样地去与透明色判断
!=TransColor - >绘制
==TransColor -> 放弃绘图
奈何 我在找了很久都找不到一个能截取图片的函数 ( 最重要的是自己不会写这样的截取东东 ~~~ %~%)
这个是问题一 请问能提供一下截取图片的函数吗 ? ^^
问题二是这样的
由于自己的办法行不通 我上网去参考前辈们的程式
得到了下面的一段代码 : ( 成功运作 )
由于没有注解 我只能尽可能地猜想 现在将我的想法括于下
/*
这是一个用来画透明位图的函数
CDC *pDC 需要画位图的CDC指针
UINT IDImage 位图资源ID
CRect &rect 指定位图在pDC中的位置 ( 应该吧 自己也不知道)
COLORREF rgbMask 位图的透明色
*/
void CBCGTestView: rawTransparentBitmap(CDC *pDC, UINT IDImage,CRect &rect, COLORREF rgbMask)
{
BITMAP BM;
CDC ImageDC,MaskDC;
CBitmap Image,*pOldImage;
CBitmap maskBitmap,*pOldMaskDCBitmap ;
Image.LoadBitmap(IDImage); // 载入图片并且初始 建立相容记忆块
ImageDC.CreateCompatibleDC(pDC); //
pOldImage=ImageDC.SelectObject(&Image);
Image.GetObject(sizeof(BM),&BM);
MaskDC.CreateCompatibleDC(pDC);
// 动态制作一个单色(黑白)的遮罩 对应于Image图片的遮罩图
maskBitmap.CreateBitmap( BM.bmWidth, BM.bmHeight, 1, 1, NULL );
pOldMaskDCBitmap = MaskDC.SelectObject( &maskBitmap );
ImageDC.SetBkColor(rgbMask); // 从这里开始有点模糊
/* 问题三 : 请问SetBkColor 的用途是什么
上说是设置背景色
可系统自己就可以分辨出背景与前景的不同吗 ?
而且在原欲合成图中 不是已用了透明色填满了需要作透明处理的背景吗 ?
现在这段是多余的吗 ? 我曾尝试删除这段 可这样一来 程式就不行正确运作了
盼指导 */
/* 思考一 : 如果系统真的能自己判断背景的话 那其实 只要SetBkColor(Transparent) 不就可以了吗 ? 接下来就直接SRCCOPY . >< .... */
MaskDC.BitBlt( 0, 0, BM.bmWidth, BM.bmHeight, &ImageDC, 0, 0, SRCCOPY );
ImageDC.SetBkColor(RGB(0,0,0));
// 这里有点不认同
如果这样的话 背景色黑色与前景色白色
不就直接盖过了原图吗 ? 那接下来又如何在合成的作品中有原图的影子呢 ? <<由于已被盖过
ImageDC.SetTextColor(RGB(255,255,255));
ImageDC.BitBlt(0, 0, BM.bmWidth, BM.bmHeight, &MaskDC, 0, 0, SRCAND);
pDC->BitBlt(0,0,BM.bmWidth, BM.bmHeight, &MaskDC, 0, 0, SRCAND);
pDC->BitBlt(0,0,BM.bmWidth, BM.bmHeight, &ImageDC, 0, 0,SRCPAINT);
MaskDC.SelectObject(pOldMaskDCBitmap);
ImageDC.SelectObject(pOldImage);
}
大部份的步骤我 想了很久 应该可以简括如下
一) 参考原图建立黑白遮罩
二) 以遮罩修改原图 SRCAND
三) 以遮罩修改背景图 SRCAND
四) 以被修改过的原图与修改过的背景图输出合成图 SRCPAINT
困惑一 : 对于AND我多少有点粗略的认知
由于是AND COLOR BITS.
BLACK = 0,0,0
Therefore, Bits Is Equivalent to All 0's.
White=255,255,255
Therefore Bits Is Equivalent to Aall 1's
ANDing 1 & 0 -> 零
可原图中并没有特定的黑色跟白色啊
那这样的AND 不就没意义了吗 ? << 不能使黑白 到白 没有一个准则 ><
---------------------------不知所谓的问题的结束-----------------------------------------
谢谢大家抽空
祝 安康 ^^ |
|