strechdibitsblt左上角的值为什么会变?

下次自動登錄
現在的位置:
& 綜合 & 正文
StretchBlt函數用法。
StretchBlt
  函數功能:函數從源矩形中複製一個點陣圖到目標矩形,必要時按目前目標設備設置的模式進行圖像的拉伸或壓縮。  函數原型:BOOL StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeighDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop);  參數:  hdcDest:指向目標設備環境的句柄。  nXOriginDest:指定目標矩形左上角的X軸坐標,按邏輯單位表示坐標。  nYOriginDest:指定目標矩形左上角的Y軸坐標,按邏輯單位表示坐標。  nWidthDest:指定目標矩形的寬度,按邏輯單位表示寬度。  nHeightDest:指定目標矩形的高度,按邏輯單位表示高茺。  hdcSrc:指向源設備環境的句柄。  nXOriginSrc:指向源矩形區域左上角的X軸坐標,按邏輯單位表示坐標。  nYOriginSrc:指向源矩形區域左上角的Y軸坐標,按邏輯單位表示坐標。  nWidthSrc:指定源矩形的寬度,按邏輯單位表示寬度。  nHeightSrc:指定源矩形的高度,按邏輯單位表示高度。  dwRop:指定要進行的光柵操作。光柵操作碼定義了系統如何在輸出操作中組合顏色,這些操作包括刷子、源點陣圖和目標點陣圖等對象。參考BitBlt可了解常用的光柵操作碼列表。  返回值:如果函數執行成功,那麼返回值為非零,如果函數執行失敗,那麼返回值為零。Windows NT:若想獲得更多的錯誤信息,請調用GetLastError函數。
&&&&推薦文章:
【上篇】【下篇】用StretchBlt贴图失真问题
[问题点数:45分,结帖人u]
用StretchBlt贴图失真问题
[问题点数:45分,结帖人u]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2013年12月 VC/MFC大版内专家分月排行榜第二
2014年2月 VC/MFC大版内专家分月排行榜第三2013年11月 VC/MFC大版内专家分月排行榜第三
2015年9月 VC/MFC大版内专家分月排行榜第二2015年7月 硬件/嵌入开发大版内专家分月排行榜第二2014年5月 VC/MFC大版内专家分月排行榜第二2014年3月 VC/MFC大版内专家分月排行榜第二2013年10月 VB大版内专家分月排行榜第二2013年7月 VB大版内专家分月排行榜第二2012年5月 VB大版内专家分月排行榜第二2012年4月 VB大版内专家分月排行榜第二2012年2月 VB大版内专家分月排行榜第二2011年11月 VB大版内专家分月排行榜第二
2015年11月 VC/MFC大版内专家分月排行榜第三2015年6月 VC/MFC大版内专家分月排行榜第三2015年2月 VC/MFC大版内专家分月排行榜第三2014年1月 VC/MFC大版内专家分月排行榜第三2012年3月 VB大版内专家分月排行榜第三2011年12月 VB大版内专家分月排行榜第三2011年10月 VB大版内专家分月排行榜第三
2015年9月 VC/MFC大版内专家分月排行榜第二2015年7月 硬件/嵌入开发大版内专家分月排行榜第二2014年5月 VC/MFC大版内专家分月排行榜第二2014年3月 VC/MFC大版内专家分月排行榜第二2013年10月 VB大版内专家分月排行榜第二2013年7月 VB大版内专家分月排行榜第二2012年5月 VB大版内专家分月排行榜第二2012年4月 VB大版内专家分月排行榜第二2012年2月 VB大版内专家分月排行榜第二2011年11月 VB大版内专家分月排行榜第二
2015年11月 VC/MFC大版内专家分月排行榜第三2015年6月 VC/MFC大版内专家分月排行榜第三2015年2月 VC/MFC大版内专家分月排行榜第三2014年1月 VC/MFC大版内专家分月排行榜第三2012年3月 VB大版内专家分月排行榜第三2011年12月 VB大版内专家分月排行榜第三2011年10月 VB大版内专家分月排行榜第三
2015年9月 VC/MFC大版内专家分月排行榜第二2015年7月 硬件/嵌入开发大版内专家分月排行榜第二2014年5月 VC/MFC大版内专家分月排行榜第二2014年3月 VC/MFC大版内专家分月排行榜第二2013年10月 VB大版内专家分月排行榜第二2013年7月 VB大版内专家分月排行榜第二2012年5月 VB大版内专家分月排行榜第二2012年4月 VB大版内专家分月排行榜第二2012年2月 VB大版内专家分月排行榜第二2011年11月 VB大版内专家分月排行榜第二
2015年11月 VC/MFC大版内专家分月排行榜第三2015年6月 VC/MFC大版内专家分月排行榜第三2015年2月 VC/MFC大版内专家分月排行榜第三2014年1月 VC/MFC大版内专家分月排行榜第三2012年3月 VB大版内专家分月排行榜第三2011年12月 VB大版内专家分月排行榜第三2011年10月 VB大版内专家分月排行榜第三
2015年9月 VC/MFC大版内专家分月排行榜第二2015年7月 硬件/嵌入开发大版内专家分月排行榜第二2014年5月 VC/MFC大版内专家分月排行榜第二2014年3月 VC/MFC大版内专家分月排行榜第二2013年10月 VB大版内专家分月排行榜第二2013年7月 VB大版内专家分月排行榜第二2012年5月 VB大版内专家分月排行榜第二2012年4月 VB大版内专家分月排行榜第二2012年2月 VB大版内专家分月排行榜第二2011年11月 VB大版内专家分月排行榜第二
2015年11月 VC/MFC大版内专家分月排行榜第三2015年6月 VC/MFC大版内专家分月排行榜第三2015年2月 VC/MFC大版内专家分月排行榜第三2014年1月 VC/MFC大版内专家分月排行榜第三2012年3月 VB大版内专家分月排行榜第三2011年12月 VB大版内专家分月排行榜第三2011年10月 VB大版内专家分月排行榜第三
2015年9月 VC/MFC大版内专家分月排行榜第二2015年7月 硬件/嵌入开发大版内专家分月排行榜第二2014年5月 VC/MFC大版内专家分月排行榜第二2014年3月 VC/MFC大版内专家分月排行榜第二2013年10月 VB大版内专家分月排行榜第二2013年7月 VB大版内专家分月排行榜第二2012年5月 VB大版内专家分月排行榜第二2012年4月 VB大版内专家分月排行榜第二2012年2月 VB大版内专家分月排行榜第二2011年11月 VB大版内专家分月排行榜第二
2015年11月 VC/MFC大版内专家分月排行榜第三2015年6月 VC/MFC大版内专家分月排行榜第三2015年2月 VC/MFC大版内专家分月排行榜第三2014年1月 VC/MFC大版内专家分月排行榜第三2012年3月 VB大版内专家分月排行榜第三2011年12月 VB大版内专家分月排行榜第三2011年10月 VB大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。stretchblt为什么会造成图片失真
stretchblt为什么会造成图片失真
我用stretchblt缩小图片,结果发现图片上有麻点、网格等,色彩也变了。这是怎么回事
VC 下 StretchBlt 的模式及失真问题 用一个CCD的相机,采集图像,然后在对话框的图片控件中显示。现象:原本应该是黑白相机的灰度图像,显示出来的却是花花绿绿的彩色图像。 & & 开始的时候怀疑是采集的数据有问题,可是查看保存下来的bmp文件,却正常的很。可以确定是显示程序的问题。问题是,基本上是按照sdk的sample逐行抄的,唯一的一点区别就是,sdk是在一个单文档的view中显示,我的程序是在对话框的图片控件中显示,最有可能出错的就是&StretchDIBits(pDC-&GetSafeHdc(),&&rect.left,&&&rect.top,&&&&&&& rect.Width(),&&&&&//显示窗口宽度&&rect.Height(),&&&&&//显示窗口高度&&0,&&0,&&Width,&&&&&//图像宽度&&Height,&&&&&//图像高度&&m_pImageBuffer,&&&//图像缓冲区&&m_pBmpInfo,&&&&//BMP图像描述信息&&DIB_RGB_COLORS,&&SRCCOPY&&);& 认真地检查了所有的参数,没有发现异常。跑到baidu和google上疯狂地搜,又重新建立了一个对话框工程,load一个图片来显示,问题重现,偶然看到 里面提到StretchDIBits引起的失真问题,遂增加pDC-& SetStretchBltMode(HALFTONE); 问题解决! 附上网文:  在 VC 中使用 StretchBlt 会碰到一些与点阵图大小缩放相关的一些问题。在扩展一个点阵图时,StretchBlt必须复制图素行或列。如果放大倍数不是原图的整数倍,那么此操作会造成产生的图像有些失真。   如果目的矩形比来源矩形小,那么StretchBlt在缩小图像时就必须把两行(或列)或者多 行(或列)的图素合并到一行(或列)。完成此操作有四种方法,它根据装置内容伸展模式属性来选择其中一种方法。您可使用 SetStretchBltMode 函数来修改这个属性。 &&&&&& SetStretchBltMode (hdc, iMode) ; &&&&&& iMode 可取下列值: &&&&&& BLACKONWHITE 或者 STRETCH_ANDSCANS(内定):如果两个或多个图素得合并成一个图素,那么StretchBlt会对图素执行一个逻辑AND运算。这样的结果是只有全部的原始图素是白色时该图素才为白 色,其实际意义是黑色图素控制了白色图素。这适用于白背景中主要是黑色的单色点阵图。 &&&&&& WHITEONBLACK 或 STRETCH_ORSCANS:如果两个或多个图素得合并成一个图素,那么StretchBlt 执行逻辑OR运算。这样的结果是只有全部的原始图素都是黑色时才是黑色,也就是说由白色图 素决定颜色。这适用於黑色背景中主要是白色的单色点阵图。 &&&&&& COLORONCOLOR 或 STRETCH_DELETESCANS:StretchBlt 简单地消除图素行或列,而没有任何逻辑组合。这是通常是处理彩色点阵图的最佳方法。 &&&&&& HALFTONE 或 STRETCH_HALFTONE:Windows根据组合起来的来源颜色来计算目的的平均颜色。这将与半调调色盘联合使用,第十六章将展示这一程序。 &&&&&& 利用StretchBlt缩小图片时有时会出现颜色失真。解决步骤如下: &&&&&& 1、先把目标DC (也就是 HDC hDestDC) ::SetStretchBltMode (hDestDC, HALFTONE); &&&&&& 2、调用一下 ::SetBrushOrgEx(hDestDC, 0, 0, NULL); &&&&&& 3、最后调用 CImage 的 StretchBlt &&& 或者这样解决: &&&& 1。hbit = (HBITMAP)LoadImage( NULL,cBmpPath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);&&& if(hbit != NULL) {&&&& Bitmap.Attach(hbit);&&&& DCCompatible.CreateCompatibleDC(GetDC());&&&& DCCompatible.SelectObject(&Bitmap);&&&& Bitmap.GetObject(sizeof(bm),&bm);} &&& 2。OnPaint(): &&& pDC-&SetStretchBltMode(HALFTONE);&&& pDC-&StretchBlt(MAP_LEFT,MAP_TOP,MAP_WIDTH,MAP_HEIGHT, &DCCompatible,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
对于彩色图片来说,选择那种方式可以得到PHOTOSHOP的效果
相关知识略懂社热议
相关知识略懂社热议等待您来回答
操作系统领域专家
& &SOGOU - 京ICP证050897号Stretch BltBitBlt函数的使用_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
Stretch BltBitBlt函数的使用
上传于||暂无简介
大小:5.71KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢5064人阅读
VC++中StretchBlt图像失真问题的解决办法
 在 VC 中使用 StretchBlt 会碰到一些与点阵图大小缩放相关的一些问题。在扩展一个点阵图时,StretchBlt必须复制图素行或列。如果放大倍数不是原图的整数倍,那么此操作会造成产生的图像有些失真。
  如果目的矩形比来源矩形小,那么StretchBlt在缩小图像时就必须把两行(或列)或者多 行(或列)的图素合并到一行(或列)。完成此操作有四种方法,它根据装置内容伸展模式属性来选择其中一种方法。您可使用 SetStretchBltMode 函数来修改这个属性。&&&&&& SetStretchBltMode (hdc, iMode) ;&&&&&& iMode 可取下列值:&&&&&& BLACKONWHITE 或者 STRETCH_ANDSCANS(内定):如果两个或多个图素得合并成一个图素,那么StretchBlt会对图素执行一个逻辑AND运算。这样的结果是只有全部的原始图素是白色时该图素才为白 色,其实际意义是黑色图素控制了白色图素。这适用于白背景中主要是黑色的单色点阵图。&&&&&& WHITEONBLACK 或 STRETCH_ORSCANS:如果两个或多个图素得合并成一个图素,那么StretchBlt 执行逻辑OR运算。这样的结果是只有全部的原始图素都是黑色时才是黑色,也就是说由白色图 素决定颜色。这适用於黑色背景中主要是白色的单色点阵图。&&&&&& COLORONCOLOR 或 STRETCH_DELETESCANS:StretchBlt 简单地消除图素行或列,而没有任何逻辑组合。这是通常是处理彩色点阵图的最佳方法。&&&&&& HALFTONE 或 STRETCH_HALFTONE:Windows根据组合起来的来源颜色来计算目的的平均颜色。这将与半调调色盘联合使用,第十六章将展示这一程序。&&&&&& 利用StretchBlt缩小图片时有时会出现颜色失真。解决步骤如下:&&&&&& 1、先把目标DC (也就是 HDC hDestDC) ::SetStretchBltMode (hDestDC, HALFTONE); &&&&&& 2、调用一下 ::SetBrushOrgEx(hDestDC, 0, 0, NULL); &&&&&& 3、最后调用 CImage 的 StretchBlt
&&& 或者这样解决:
&&&& 1。hbit = (HBITMAP)LoadImage( NULL,cBmpPath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);&&& if(hbit != NULL) {&&&& Bitmap.Attach(hbit);&&&& DCCompatible.CreateCompatibleDC(GetDC());&&&& DCCompatible.SelectObject(&Bitmap);&&&& Bitmap.GetObject(sizeof(bm),&bm);}
&&& 2。OnPaint():
&&& pDC-&SetStretchBltMode(HALFTONE);&&& pDC-&StretchBlt(MAP_LEFT,MAP_TOP,MAP_WIDTH,MAP_HEIGHT,
&DCCompatible,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:469081次
积分:6096
积分:6096
排名:第2716名
原创:143篇
转载:78篇
评论:110条
(4)(6)(1)(2)(5)(1)(4)(1)(3)(1)(5)(1)(1)(6)(3)(1)(4)(1)(6)(15)(14)(22)(20)(1)(1)(1)(1)(1)(4)(8)(2)(9)(2)(1)(2)(3)(3)(1)(3)(6)(3)(3)(2)(1)(1)(1)(7)(7)(3)(1)(7)(1)(3)(7)(1)(1)

我要回帖

更多关于 strechable 的文章

 

随机推荐