久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

CImage類 - blade2001的專欄

 iuv 2007-08-20
CImage類

CImage類的成員可分為連接與創(chuàng)建,、輸入與輸出、位圖類型與參數(shù),以及圖形繪制與位圖塊傳送等4類,。
(1) 連接與創(chuàng)建
Attach 將一個DIB(或DDB)位圖與CImage對象相連接
Detach 位圖與CImage對象相分離
Create 創(chuàng)建一個DIB位圖并將它與已有CImage對象相連接
Destroy 位圖與Cimage對象相分離并刪除
(2) 輸入與輸出
GetImporterFilterString 返回系統(tǒng)支持的輸入文件格式類型及其描述
GetExporterFilterString 返回系統(tǒng)支持的輸出文件格式類型及其描述
Load 讀入指定圖像文件中的圖像
LoadFromResource 讀入指定資源文件中的圖像
Save 按指定類型保存圖像,,文件名中不能省略后綴
IsNull 判別源圖像文件是否已經(jīng)讀入
(3) 位圖類型與參數(shù)
GetWidth 返回當前圖像的寬度(以像素為單位)
GetHeight 返回當前圖像的高度
GetBPP 返回當前圖像的每像素位數(shù)
GetBits 返回當前圖像像素數(shù)據(jù)的指針
GetPitch 返回相鄰兩行像素首地址之間的間隔
GetPixelAddress 返回指定像素數(shù)據(jù)存放位置的存儲地址
GetMaxColorTableEntries返回調(diào)色板單元數(shù)
IsDibSection 確定位圖是否為DIB位圖
IsIndexed 判別位圖中是否有調(diào)色板
IsTransparencySupported判別應(yīng)用程序是否支持透明位圖
AlphaBlend 是否支持透明或半透明顯示的狀態(tài)
(4) 圖形繪繪與位圖塊傳送
GetDC 返回當前位圖的設(shè)備描述表
ReleaseDC 釋放設(shè)備描述表
GetPixel 返回指定位置像素的顏色
SetPixel 設(shè)置指定位置像素的顏色
SetPixelIndexed 設(shè)置指定位置像素顏色的索引值
SetPixelRGB 設(shè)置指定位置像素的紅綠藍分量
GetColorTable 獲取調(diào)色板顏色分量(紅,、綠,、藍)值
SetColorTable 設(shè)置調(diào)色板顏色分量(紅,、綠、藍)值
SetTransparentColor 設(shè)置透明顏色的索引值,,只能有一種顏色可為透明
Draw 從源矩形復(fù)制到目標矩形,,支持伸縮、a融合與透明
BitBlt 位圖的一個舉行區(qū)域復(fù)制到另一位圖上的制定區(qū)域
MaskBlt 為圖塊傳送時須與指定的模板圖像做邏輯操作
PlgBlt 為圖的矩形區(qū)域到另一位圖上平行四邊形間的位塊傳輸
StretchBlt 從源矩形復(fù)制到目標矩形,,支持伸縮
TransparentBlt 位圖塊傳送時復(fù)制帶透明色的位圖


FAQ:
 1. 關(guān)于GetBits()函數(shù)的使用.對于一幅DIB圖像來說,圖像的左下角為像素數(shù)據(jù)的起點,。通常我們會認為GetBits()函數(shù)返回的是圖像左下角的數(shù)據(jù)指針,,但是CImage實現(xiàn)卻不是這樣,。GetBits()返回的是圖像左上角的像素數(shù)據(jù)指針。從這個角度上來講,,它的功能等效于函數(shù)GetPixelAddress(0,0)調(diào)用,。而且CImage的成員函數(shù)中坐標是以左上角為坐標原點來表示的。

   2. 關(guān)于SetPixelIndexed()函數(shù)的使用. 從函數(shù)名我們可以得知,,該函數(shù)應(yīng)該應(yīng)用于非真彩色圖像,,特別是8位的圖像。在測試該函數(shù)時,,發(fā)現(xiàn)應(yīng)用于8位BMP圖像時,,不管設(shè)置什么索引值,操作后的結(jié)果顯示索引值變成了0,。這個現(xiàn)象確實讓人匪夷所思,。不知道是不是CImage類的該函數(shù)設(shè)計有問題。當然,,如果將它不合理地應(yīng)用于真彩色圖像,,操作的結(jié)果還是黑色。

   3. 另外,,CImage類中還有一些函數(shù),譬如SetPixel()和SetPixelRGB()函數(shù),,理論上應(yīng)該將它們應(yīng)用于真彩色圖像,但是如果強硬的將它們應(yīng)用于非真彩色圖像(測試中將它們應(yīng)用于8位BMP圖像),,操作結(jié)果顯示設(shè)置的值都會被“合理”的變成灰階數(shù)據(jù),,比如說,如果我們設(shè)置RGB值為(180,0,0),操作結(jié)果為調(diào)色板里的數(shù)據(jù)變?yōu)镽GB(60,60,60).
  
   4. 直接調(diào)用CImage類的GetPixel和SetPixel效率是很低的,, 如果要循環(huán)遍歷所有Pixels的話,, 需要用GetPixelAddress直接取得像素數(shù)據(jù)的存儲地址, 然后進行操作,。這種方法有個問題: How to handle the PixelAddresses correctly with diffrent kinds of BPPs (Bits Per Pixel).
   For 24 BPP Images:
      for setting
  inline void setPixel(int x, int y, COLORREF &c)
  {
   BYTE *p = (BYTE*)imgage.GetPixelAddress(x, y);
   *p++ = GetRValue(c);
   *p++ = GetGValue(c);
   *p = GetBValue(c);
  }
  
  
  & for getting a pixel
  
  inline COLORREF getPixel(int x, int y) const
  {
   return(*(COLORREF*)(image.GetPixelAddress(x, y)));
  }
   
   For 16 BPP Images:
  16-bit images would be easy to support, and they are much similar to 32-bit images.
  16-bit colour pixels are stored in 5-6-5 format (five bits for red, six bits for green, and five for blue).
  
  inline void setPixel(int x, int y, COLORREF &c)
  {
   WORD *p = (WORD*)imgage.GetPixelAddress(x, y);
   *p = ((GetRValue(c) >> 3) << 11) + ((GetGValue(c) >> 2) << 5) + (GetBValue(c) >> 3);
  }
  
  inline COLORREF getPixel(int x, int y) const
  {
   WORD *p = (WORD*)image.GetPixelAddress(x, y);
   return RGB(((*p & 0xF800) >> 8), ((*p & 0x07E0) >> 3), ((*p & 0x001F) << 3));
  }
  
 Ref: http://www./forum/archive/index.php/t-315327.html 



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1604216


[收藏到我的網(wǎng)摘]   blade2001發(fā)表于 2007年05月11日 11:07:00

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多