解决位图失真-SetStretchBltMode
2014-04-24 12:50
309 查看
当用以下函数加载一张位图时,当窗口发生重绘更改大小时,位图将失真:
SetStretchBltMode函数设置在指定设备内容中的伸展模式。
参考:http://baike.baidu.com/view/1080401.htm
int SetStretchBltMode(
HDC hdc, // DC的HANDLE
int iStretchMode // 位图伸展模式
);
Hdc:输入,设备内容的HANDLE
iStretchMode:输入,指定的伸展模式,参数可以下面值之一:
值
描述
BLACKONWHITE
执行一个布尔AND操作在要删除的存在的图素上。如果位图是一个单色位图,这个模式保留黑色的像素为白色的像素。
COLORONCOLOR
删除像素,这个模式删除所有待删除的像素行,而不保留他们的信息。
HALFTONE
从源矩形映射像素到指定的目标矩形。目标和源矩形的平均颜色是相似的。
在设置HALFTON伸展模式之后,应用程序必须调用SetBrushOrgEx函数来设置刷源。如果该调用失败了,刷子将不对齐。
This option is not supported on Windows 95/98/Me.
STRETCH_ANDSCANS
Same as BLACKONWHITE.
STRETCH_DELETESCANS
Same as COLORONCOLOR.
STRETCH_HALFTONE
Same as HALFTONE.
STRETCH_ORSCANS
Same as WHITEONBLACK.
WHITEONBLACK
执行一个布尔或操作,使用待删除的存在的像素的颜色。如果位图是一个单色的位图,这个模式将保留白色的像素为黑色像素。
返回值:
如果函数成功,返回先前的伸展模式
如果失败,返回0
WINDOWS NT/2000/XP:使用GetLastError可以得到更多的信息,下面是其中之一:
值
意义
ERROR_INVALID_PARAMETER
一到多个参数无效
备注:
伸展模式定义了程序调用StretchBlt函数的时候怎么样在显示设备上用存在的像素合并位图行或列。
BLACKONWHITE (STRETCH_ANDSCANS)和WHITEONBLACK (STRETCH_ORSCANS)典型的用来保留单色位图的前景像素。COLORONCOLOR (STRETCH_DELETESCANS)模式通常用来保留彩色位图中的颜色。
HALFTONE相对较慢,并要求更多的源图象处理,但提供较高的图像质量。同样SetBrushOrgEx也不惜是HALFTON模式以免刷子不对齐。
另外,伸展模式也依赖于设备驱动器的能力。
BOOL CGraphicView::OnEraseBkgnd(CDC* pDC) { // TODO: Add your message handler code here and/or call default CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP2); BITMAP bmp; bitmap.GetBitmap(&bmp); CDC dcCompatible; dcCompatible.CreateCompatibleDC(pDC); dcCompatible.SelectObject(&bitmap); CRect rect; GetClientRect(&rect); pDC->SetStretchBltMode(COLORONCOLOR); //设置在指定设备内容中的伸展模式。解决失真问题。 //pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY); pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); return TRUE; }
SetStretchBltMode函数设置在指定设备内容中的伸展模式。
参考:http://baike.baidu.com/view/1080401.htm
int SetStretchBltMode(
HDC hdc, // DC的HANDLE
int iStretchMode // 位图伸展模式
);
Hdc:输入,设备内容的HANDLE
iStretchMode:输入,指定的伸展模式,参数可以下面值之一:
值
描述
BLACKONWHITE
执行一个布尔AND操作在要删除的存在的图素上。如果位图是一个单色位图,这个模式保留黑色的像素为白色的像素。
COLORONCOLOR
删除像素,这个模式删除所有待删除的像素行,而不保留他们的信息。
HALFTONE
从源矩形映射像素到指定的目标矩形。目标和源矩形的平均颜色是相似的。
在设置HALFTON伸展模式之后,应用程序必须调用SetBrushOrgEx函数来设置刷源。如果该调用失败了,刷子将不对齐。
This option is not supported on Windows 95/98/Me.
STRETCH_ANDSCANS
Same as BLACKONWHITE.
STRETCH_DELETESCANS
Same as COLORONCOLOR.
STRETCH_HALFTONE
Same as HALFTONE.
STRETCH_ORSCANS
Same as WHITEONBLACK.
WHITEONBLACK
执行一个布尔或操作,使用待删除的存在的像素的颜色。如果位图是一个单色的位图,这个模式将保留白色的像素为黑色像素。
返回值:
如果函数成功,返回先前的伸展模式
如果失败,返回0
WINDOWS NT/2000/XP:使用GetLastError可以得到更多的信息,下面是其中之一:
值
意义
ERROR_INVALID_PARAMETER
一到多个参数无效
备注:
伸展模式定义了程序调用StretchBlt函数的时候怎么样在显示设备上用存在的像素合并位图行或列。
BLACKONWHITE (STRETCH_ANDSCANS)和WHITEONBLACK (STRETCH_ORSCANS)典型的用来保留单色位图的前景像素。COLORONCOLOR (STRETCH_DELETESCANS)模式通常用来保留彩色位图中的颜色。
HALFTONE相对较慢,并要求更多的源图象处理,但提供较高的图像质量。同样SetBrushOrgEx也不惜是HALFTON模式以免刷子不对齐。
另外,伸展模式也依赖于设备驱动器的能力。
相关文章推荐
- 解决位图失真-SetStretchBltMode()
- 解决位图失真-SetStretchBltMode
- 解决VC中图像缩小失真的问题:利用CDC::SetStretchBltMode
- SetSTretchBltMode解决图像失真问题
- SetStretchBltMode() 防止图片失真
- SetStretchBltMode() 防止图片失真
- StretchBlt之前防止图片失真SetStretchBltMode(COLORONCOLOR);
- 使用StretchBlt之前一定要用SetStretchBltMode(COLORONCOLOR)
- vc代码显示图像的质量问题,SetStretchBltMode的作用
- StretchBlt、SetSTretchBltMode
- SetStretchBltMode-WINDOWS API
- SetStretchBltMode-WINDOWS API
- SetStretchBltMode-WINDOWS API
- VC++ MFC 中的SelectPalette()函数和SetStretchBltMode()函数
- BitBlt 函数 详解, StretchBlt、SetStretchBltMode、SetBrushOrgEx 按句柄截图、直接截取缩略图
- SetStretchBltMode
- SetStretchBltMode(HALFTONE)
- StretchBlt、SetSTretchBltMode - [Daliy APIs]
- SetStretchBltMode
- SetStretchBltMode函数的问题