解決位圖失真-SetStretchBltMode()


當用以下函數加載一張位圖時,當窗口發生重繪更改大小時,位圖將失真:

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->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);

 

SetStretchBltMode函數設置在指定設備內容中的伸展模式。

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模式以免刷子不對齊。 另外,伸展模式也依賴於設備驅動器的能力。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM