1. 伯乐范文网 > 知识库 >

transparentblt,windows编程中使用TransparentBlt效果怎么消除白

本文目录索引

1,windows编程中使用TransparentBlt效果怎么消除白边

TransparentBlt 函数在Windows98/Windows2000以上版本运行,系统中需要包含 Msimg32.dll,使用时可以链接 Msimg32.lib。
Windows98下的TransparentBlt会产生资源泄漏,所以不建议在WIN98下使用该函数。
TransparentBlt函数原型如下:
BOOL TransparentBlt(
HDC hdcDest, // 目标DC
int nXOriginDest, // 目标X偏移
int nYOriginDest, // 目标Y偏移
int nWidthDest, // 目标宽度
int hHeightDest, // 目标高度
HDC hdcSrc, // 源DC
int nXOriginSrc, // 源X起点
int nYOriginSrc, // 源Y起点
int nWidthSrc, // 源宽度
int nHeightSrc, // 源高度
UINT crTransparent // 透明色,COLORREF类型
);
使用例子:
CBitmap DispBmp;
CBitmap *OldBmp;
CDC SourceDC;
DispBmp.LoadBitmap("TEST_BITMAP");//如果是IDB_XXX则不需加引号!
SourceDC.CreateCompatibleDC(PDC);
OldBmp = SourceDC.SelectObject(&DispBmp);
::TransparentBlt(PDC->m_hDC,0, 0,128, 128, SourceDC.m_hDC,0,0,128,128,RGB(0,0,0));
SourceDC.SelectObject(OldBmp);

要注意的是TransparentBlt函数使用的位图是8位或者24位的。

此外,还有两个相近的函数:StretchBlt 和 BitBlt,那么他们的区别在何处?
BOOL StretchBlt //此函数将一个位图资源从一个矩形区域拷贝到另一个矩形区域,即缩放位图,但不能指定透明色
( int x, //指定目的矩形区域左上角的X坐标
int y, //指定目的矩形区域左上角的Y坐标
int nWidth, //指定目的矩形区域的宽度
int nHeight, //指定目的矩形区域的高度
CDC* pSrcDC,
int xSrc, //指定源矩形区域左上角的X坐标
int ySrc, //指定源矩形区域左上角的Y坐标
int nSrcWidth, //指定源矩形区域的宽度
int nSrcHeight, //指定源矩形区域的高度
DWORD dwRop //此参数参考MSDN,SRCCOPY类型为直接拷贝 );


BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop ); //此函数同样用来拷贝位图资源,但不具备缩放功能。


也就是说:bitblt直接按你指定的大小输出源dc到目标dc,而strechblt会调整你源dc大小,使之适应你所指定的目标dc大小,再输出。strechblt输出的图总是能够充填满你指定的目标DC区域,而bitblt输出的图无法布满目标dc制定区域。

windows编程中使用TransparentBlt效果怎么消除白边

2,c++ 使用TransparentBlt后为什么图片被放大了?要怎么修改?

TransparentBlt(cacheHdc, 0, 0, m_bgBitmap.bmWidth,m_bgBitmap.bmHeight,
hookHdc, 0, 0, m_hookCRt.Width(),m_hookCRt.Height(), RGB(255,255,255));
TransparentBlt函数参数的作用:
第1个参数,是资源的位图句柄;
第2、3个参数,资源图片的起始坐标的x,y值;
第4、5个参数,资源图片的宽、高值;
第6个参数,你要画到哪里的目的位图句柄;
第7、8个参数,画到目的位图句柄的起始坐标x,y值;
第9、10个参数,画到目的位图句柄的宽、高值;
第11个参数,应该是要过滤掉的颜色(太久没用这函数,不太确定)。
所以如果你画的图被放大了,那就是第4、5与第9、10参数的值不相等所导致的。4与9要相等,5与10要相等。

3,请教函数TransparentBlt的用法

函数功能:该函数对指定的源设备环境中的矩形区域像素的颜色数据进行位块(bit_block)转换,并将结果置于目标设备环境。 函数原型:BOOL TransparentBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int hHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, UINT crTransparent); 参数: 。 nXOriginDest:指定目标矩形左上角的X轴坐标,坐标以逻辑单位表示。 nYOriginDest:指定目标矩形左上角的Y轴坐标,坐标以逻辑单位表示。 。 nHeightDest:指定目标矩形的高度。 。 nXOriginSrc:指定源矩形(左上角)的X轴坐标,坐标以逻辑单位表示。 nYOriginsrc:指定源矩形(左上角)的Y轴坐标,坐标以逻辑单位表示。 nWidthSrc:指定源矩形的宽度。 nHeightSrc:指定源矩形的高度。 crTransparent:源位图中的RGB值当作透明颜色。(用RGB(0,0,0)也就是黑色不行)返回值:如果函数执行成功,那么返回值为TRUE;如果函数执行失败,那么返回值为FALSE。 Windows NT:若想获取更多错误信息,请调用GetLastError函数。 备注:函数TransparentBlt支持4位/像素和8位/像素格式的源位图,使用AlphaBlend可以指定带有透明度的32位/像素格式的位图。如果源和目标矩形的大小不一致,那么将对源位图进行拉伸以与目标矩形匹配,当使用SetStretchBltMode函数时,BLACKONWHITE和WHITEONBLACK两种iStretchMode模式将被转换成TransparentBlt函数的COLORONCOLOR模式。目标设备环境指定了用于目标坐标的变换类型,而源设备环境指定了源坐标使用的变换类型。如果源位图或目标位图的宽度或高度是负数,那么TransparentBlt函数也不对位图进行镜像。 速查:Windows NT:5.0及以上版本;Windows:98及以上版本;Windows CE:Windows CE .NET 4.0 and later;头文件:wingdi.h:库文件:作为一个资源包含在msimg32.dll中。

4,VB中如何实现将两幅BMP图合并为一张BMP图

假定两幅bmp图的大小都是288*206,合并后的图片大小为288*412(即两幅图上下排列):

Private Sub Command1_Click()
With Picture1
.Width = 288
.Height = 412
.PaintPicture LoadPicture("e:\1.bmp"), 0, 0
.PaintPicture LoadPicture("e:\2.bmp"), 0, 206 * Screen.TwipsPerPixelY
SavePicture .Image, "e:\3.bmp"
End With
End Sub

Private Sub Form_Load()
Me.ScaleMode = 3
Picture1.AutoRedraw = True
End Sub

5,VB 图像拼合

这是缩小1.5倍的代码,已经调试成功,你可以试一下:
Picture1.Height = Image1.Height / 1.5
Picture1.Width = Image1.Width / 1.5
Picture1.AutoSize = True
Image1.Stretch = True
Image1.Width = Image1.Width
Image1.Height = Image1.Height
Picture1.Refresh
Picture1.AutoRedraw = True
Picture1.PaintPicture Image1.Picture, 0, 0, Image1.Width / 1.5, Image1.Height / 1.5
Picture1.Picture = Picture1.Image

6,怎么将png格式图片转成bmp的

怎么把PNG图片转BMP图片?我们可以使用【风云图片格式转换器】完成。在我们日常娱乐和日常工作中,经常会需要将图片格式进行转换。【风云图片格式转换器】可以完成这项转换,支持HEIC转换成JPG/PNG等图片格式, JPG/PNG/BMP等图片格式之间一键互转,支持批量操作  支持JPG/PNG/BMP等常规图片格式一键压缩,快捷高效。