社区
图形处理/算法
帖子详情
将一张透明的小图覆盖到大图上!
babam
2004-07-28 10:49:32
如题!希望有成熟的代码段
...全文
343
16
打赏
收藏
将一张透明的小图覆盖到大图上!
如题!希望有成熟的代码段
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
酒红绿叶
2004-09-07
打赏
举报
回复
http://www.vckbase.com/document/viewdoc/?id=532
xxduan
2004-09-06
打赏
举报
回复
如果你不希望程序是独占模式,可采用directx的镂空做法。独占模式可采用色键。
tyj7878
2004-08-13
打赏
举报
回复
如果要对像素进行处理在16位色时,要注意565和555的格式
csdn_cht
2004-08-07
打赏
举报
回复
什么鬼东西?
看不懂!
......
还真是好东西,呵呵,不错!
qiushenwei88
2004-08-07
打赏
举报
回复
好东西!
tyj7878
2004-08-06
打赏
举报
回复
LPDIRECTDRAWSURFACE7 DDSur;
DDSURFACEDESC2 DDde;
LPDIRECTDRAW7 DD;
DirectDrawCreateEx(NULL, (VOID**)&DD, IID_IDirectDraw7, NULL);//建立 DirectDraw 对象
DD->SetCooperativeLevel(m_hWnd,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN|DDSCL_ALLOWREBOOT );//设定协调等级
SetDisplayMode(1024,768,16,0,DDSDM_STANDARDVGAMODE); //设定显示模式
//建立主绘图页
memset(&DDde,0,sizeof(DDde));
DDde.dwSize = sizeof(DDde);
DDde.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
DDde.dwBackBufferCount = 2;
DDde.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP|DDSCAPS_VIDEOMEMORY;
DD->CreateSurface(&DDde,&DDSur,NULL);
//连结后缓冲区
DDcaps.dwCaps = DDSCAPS_BACKBUFFER;
DDSur->GetAttachedSurface(&DDcaps,&DDBuf);
//声明幕后幕存区的共同特性
memset(&DDde,0,sizeof(DDde));
DDde.dwSize = sizeof(DDde);
DDde.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
DDde.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
//面
DDde.dwWidth=1024;
DDde.dwHeight=768;
DD->CreateSurface(&DDde, &DDSur, NULL);
//设颜色键值
key.dwColorSpaceHighValue = RGB(200,0,200);
key.dwColorSpaceLowValue = RGB(255,0,255);
DDSur->SetColorKey(DDCKEY_SRCBLT,&key);
后面用LoadImage()将图载入到DDSur面
DDSur->SetColorKey(DDCKEY_SRCBLT,&key);//设透明
用BltFast(DDBLTFAST_SRCCOLORKEY);//到幕后缓冲
再用Flip();//翻页就可以了
tyj7878
2004-08-06
打赏
举报
回复
也可以设了颜色键值之后,用BLT(DDBLTFAST_SRCCOLORKEY)是最快最简单的!
tyj7878
2004-08-06
打赏
举报
回复
HDC hdc1,hdc2;
m_bf.BlendFlags=0;
m_bf.AlphaFormat=0;
m_bf.SourceConstantAlpha=透明度
DDBuf1->GetDC(&hdc1);
DDBuf2->GetDC(&hdc2);
AlphaBlend(hdc1,0,0,250,250,hdc2,0,0,250,250,m_bf);
DDBuf1->ReleaseDC(hdc1);
DDBuf2->ReleaseDC(hdc2);
aspirerME
2004-08-03
打赏
举报
回复
网上现成的函数
void CDesignDlg::TransparentBlt2(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, UINT crTransparent)
{
HBITMAP hOldImageBMP, hImageBMP = CreateCompatibleBitmap(hdcDest, nWidthDest, nHeightDest); // 创建兼容位图
HBITMAP hOldMaskBMP, hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 创建单色掩码位图
HDC hImageDC = CreateCompatibleDC(hdcDest);
HDC hMaskDC = CreateCompatibleDC(hdcDest);
hOldImageBMP = (HBITMAP)SelectObject(hImageDC, hImageBMP);
hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC, hMaskBMP);
// 将源DC中的位图拷贝到临时DC中
if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc)
BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, SRCCOPY);
else
StretchBlt(hImageDC, 0, 0, nWidthDest, nHeightDest,
hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, SRCCOPY);
// 设置透明色
SetBkColor(hImageDC, crTransparent);
// 生成透明区域为白色,其它区域为黑色的掩码位图
BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY);
// 生成透明区域为黑色,其它区域保持不变的位图
SetBkColor(hImageDC, RGB(0,0,0));
SetTextColor(hImageDC, RGB(255,255,255));
BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);
// 透明部分保持屏幕不变,其它部分变成黑色
SetBkColor(hdcDest,RGB(255,255,255));
SetTextColor(hdcDest,RGB(0,0,0));
BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);
// "或"运算,生成最终效果
BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCPAINT);
// 清理、恢复
SelectObject(hImageDC, hOldImageBMP);
DeleteDC(hImageDC);
SelectObject(hMaskDC, hOldMaskBMP);
DeleteDC(hMaskDC);
DeleteObject(hImageBMP);
DeleteObject(hMaskBMP);
}
hxy2003
2004-08-03
打赏
举报
回复
关注
babam
2004-07-28
打赏
举报
回复
名字还真没有取错
lchlovely
2004-07-28
打赏
举报
回复
需要用到掩碼,AlphBend,
如需要代碼,則需要money.
babam
2004-07-28
打赏
举报
回复
怎么作成透明的呢?
酒红绿叶
2004-07-28
打赏
举报
回复
我没有成熟的,,
但是我有把小图贴在大图上的,可能把小图做成透明就可以了把!!
要得话加我9404814
jyc_nj
2004-07-28
打赏
举报
回复
上述代码就是AlphaBlend的一个例子.
自己准备两幅位图资源IDB_BITMAP1,IDB_BITMAP2.
m_nAlpha2和m_nAlpha是源和目标的Alpha值, 你可以试着改这两个值,看看结果.
我觉得一般, 把m_nAlpha=255,改m_nAlpha2就可以达到从透明到不透明的效果了.
jyc_nj
2004-07-28
打赏
举报
回复
CBitmap bmp1, bmp2;
CBitmap *pOldBmp1, *pOldBmp2;
bmp1.LoadBitmap(IDB_BITMAP1);
//bmp2.LoadBitmap(IDB_BITMAP2);
BITMAP bmpInfo;
bmp1.GetBitmap(&bmpInfo);
//
CDC MemDC1, MemDC2;
MemDC1.CreateCompatibleDC(pDC);
pOldBmp1 = MemDC1.SelectObject(&bmp1);
MemDC2.CreateCompatibleDC(pDC);
// bmp2.CreateBitmap(bmpInfo.bmWidth, bmpInfo.bmHeight,
// 1, 32, NULL);
HBITMAP hBmp2;
BITMAPINFO bmpInfo2;
memset(&bmpInfo2, 0, sizeof(BITMAPINFO));
bmpInfo2.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpInfo2.bmiHeader.biWidth = bmpInfo.bmWidth;
bmpInfo2.bmiHeader.biHeight = bmpInfo.bmHeight;
bmpInfo2.bmiHeader.biPlanes = 1;
bmpInfo2.bmiHeader.biBitCount = 32 ;
bmpInfo2.bmiHeader.biCompression = BI_RGB;
bmpInfo2.bmiHeader.biClrUsed = 0;
void *pBit2;
hBmp2 = ::CreateDIBSection(pDC->GetSafeHdc(), &bmpInfo2, DIB_RGB_COLORS,
&pBit2, NULL, 0);
bmp2.Attach(hBmp2);
pOldBmp2 = MemDC2.SelectObject(&bmp2);
MemDC2.BitBlt(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight,
&MemDC1, 0, 0, SRCCOPY);
//MemDC1.FillSolidRect(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, RGB(255,0,0));
MemDC1.SelectObject(pOldBmp1);
bmp1.DeleteObject();
bmp1.LoadBitmap(IDB_BITMAP2);
pOldBmp1 = MemDC1.SelectObject(&bmp1);
//deal with alpha channel
BITMAP tmp;
bmp2.GetBitmap(&tmp);
LPBYTE lpDst, lpDstTmp;
LONG lDstStride = tmp.bmWidthBytes;
lpDst = (LPBYTE)pBit2;
LONG i, j;
BYTE alpha = m_nAlpha2;
for( j = 0 ; j < bmpInfo.bmHeight; ++j )
{
lpDstTmp = lpDst;
lpDstTmp += 3;
for( i = 0 ; i < bmpInfo.bmWidth; ++i )
{
*lpDstTmp = alpha;
lpDstTmp+=4;
}
lpDst += lDstStride;
}
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha = m_nAlpha;
bf.AlphaFormat = AC_SRC_ALPHA;
BOOL br;
br = ::AlphaBlend(MemDC1.GetSafeHdc(), 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight,
MemDC2.GetSafeHdc(), 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight,
bf);
pDC->BitBlt(bmpInfo.bmWidth, 0,
bmpInfo.bmWidth, bmpInfo.bmHeight,
&MemDC1, 0, 0, SRCCOPY);
PNG图片拼接 源码
环境VS2005 GDI+ ,用于实现多个PNG图片拼接成
一张
大图
,例如小游戏中会有多个PNG图片,为了加载的速度,把这些图片拼接成
一张
图。每张图片取有效部分,按中心点显示。使用:把PNG图片拖到对话框,点击create即可。
chatgpt赋能python:Python实现将
一张
图片贴到另
一张
图片上
本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。
PHP将
透明
图片(PNG)合并到JPG图片上,实现PNG
透明
部分
透明
的效果。
有2张图片,第
一张
为背景底图,jpg格式,简称为背景图片;第二张为放在背景图片上的图片,png格式,有一部分是
透明
的,简称为目标图片。要实现的效果是将目标图片放到背景图片上,目标图片
透明
的部分要
透明
。代码其实很简单,最关键的地方就是一定要用imagecopy这个函数。所有的代码如下:<?php //背景图片路径 $srcurl = './img/japan_map.jpg'; //目标...
opencv
大图
片上面贴
小图
在Opencv里面很多理论大家说起来都知道,也都能想到怎么做,但是真正实践起来不是那样的,可能你会经历很多次试验的失败,再到睡觉都思索时候你也还是失败,然后洗把脸继续钻研,一行一行钻研,做笔记,画图,后来发现OK了。这也就是研究的乐趣。哈哈哈。不说这么多废话。开始记录技术点。 图片合成: 注意: 1:如果你是两张合并的图片大小尺寸和深度都一样,那随便用那个方法都行。 cvAdd(...
Python+OpenCV实现png
透明
图像叠加在jpg图像上
本人在图像处理项目过程中,经常需要将一幅jpg图像叠加到另一幅背景jpg图像上,来实现一些特定的需求。例如我们经常在抖音中看到一些视频特效的叠加效果,猫耳朵等等特效在背景人脸图像上的叠加。我们利用Python+OpenCV的方式可以很简单的实现jpg图像之间的叠加,但实际项目中更多需要png
透明
图像在jpg图像上叠加。这种情况下,仍然适用传统的jpg叠加方式,就会出现原本
透明
的png图像,叠加后直接变为不
透明
的jpg图像,达不到我们想要的效果。本篇将主要讲解如何利用Python+OpenCV来实现png
透明
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章