常用的圖象處理函式的整理 (轉)

worldblog發表於2007-12-09
常用的圖象處理函式的整理 (轉)[@more@]

常用的圖象處理的整理

鄧振波


 在Visual C++中,對圖象操作的功能所能提供的函式是比較弱的,我在實踐中收集掌握了一些圖象出來的方法與技巧,總結出一個COperateBitmap類,可以實現方便的對圖象的讀取、儲存、剪貼簿操作、DIB和D的轉換,下面列出頭,工程檔案我把它寫成了一個MFC擴充套件DLL。可以點選 //bzbmoperatdll.zip">這裡 。
 1、方便從裝載各種圖形格式(JPG、BMP、Gif等)檔案,並得到圖象大小和相應點陣圖的控制程式碼,從而可以方便的操作各種影像格式, 無需瞭解各種圖象的格式,以及相應的解壓演算法,得到的點陣圖控制程式碼, 可以方便的在VC中進行各種操作。
 2、把點陣圖畫到DC上,方便的把點陣圖畫到裝置DC上,無需複雜的等
 3、透過點陣圖建立區域,可以生成各種形狀的視窗
 4、方便的兩個點陣圖複製操作,支援部分割槽域複製
 5、不用StretchBlt函式,直接改變點陣圖的大小,StretchBlt只改變顯示的大小,實際的資料並沒有發生變化,本類中的ScaleBitmap可以直接改變實際資料的大小,這將獲得一些有用的功能
 6、DDB與DIB的轉換
 7、儲存點陣圖到檔案,儲存為JPEG檔案


 這個類沒有作過多的與功能擴充,如果要寫專業的圖象操作,本類可能不適用。


class COperateBitmap
{
public:
BOOL CopyWindowToClipboard(CWnd* pWnd);
//剪貼簿操作
BOOL CopyDIBToClipboard(const CWnd* pWnd,HANDLE hDib,CPalette* pPal);
BOOL CopyBitmapToClipboard(const CWnd* pWnd,CBitmap& bitmap,CPalette* pPal);
//建立調色版,根據DIB
BOOL CreateDIBPalette(HANDLE hDIB, CPalette* pPal);
//DDB和DIB的轉換
HANDLE DDBToDIB(HBITMAP hBmp, D dwCompression, CPalette *pPal);
HBITMAP DIBToDDB( HANDLE hDIB );
HANDLE DDBToDIB( CBitmap& bitmap, DWORD dwCompression, CPalette* pPal );
int SaveBmp(HANDLE hDib,LPSTR filename);
//從檔案裝載各種圖形格式(JPG、BMP、Gif等),並得到大小和點陣圖的控制程式碼
void LoadPictureFromFile(HDC hdc, LPCTSTR szFile, CBitmap* pBitmap, CSize& mSize);
//把點陣圖畫到DC上
void DrawBitmap(CDC* dc, HBITMAP hbmp, RECT r, BOOL Stretch);
//建立區域
BOOL CreateRegion (RECT r, CRgn *pRgn, CBitmap *pBitmap, COLORREF keycol);
//兩個點陣圖對拷
void CopyBitmap(CDC* dc, CBitmap& mRes, const CBitmap& hbmp, RECT r);
//由點陣圖到區域
HRGN BitmapToRegion (HBITMAP hBmp, COLORREF cTransparentColor = 0, COLORREF cTolerance = 0x101010);
COperateBitmap();
//縮放圖象主函式,由Ivaylo Byalko編寫
HBITMAP ScaleBitmap(HBITMAP hBmp, WORD wNewWidth, WORD wNewHeight);
//儲存DIB為JPEG檔案
BOOL JpegFromDib(HANDLE hDib, //Handle to DIB
int nQuality, //JPEG quality (0-100)
CString strJpegFileName, //Pathname to target jpeg file
CString* strMsg); //Error msg to return
virtual ~COperateBitmap();
protected:
//下面三個縮放圖象輔助函式,由Ivaylo Byalko編寫
BITMNFO *PrepareRGBBitmapInfo(WORD wWidth, WORD wHeight);
void ShrinkData(BYTE *pInBuff, WORD wWidth, WORD wHeight,
BYTE *pOutBuff, WORD wNewWidth, WORD wNewHeight);
void EnlargeData(BYTE *pInBuff, WORD wWidth, WORD wHeight,
BYTE *pOutBuff, WORD wNewWidth, WORD wNewHeight);
WORD DIBNumColors(LPSTR lpbi);
WORD PaletteSize(LPSTR lpbi);
float *CreateCoeff(int nLen, int nNewLen, BOOL bShrink);
//操作JPEG檔案
BOOL BuildSamps(HANDLE hDib,
int nSampsPerRow,
struct jpeg_compress_struct cinfo,
JSAMPARRAY jsmpArray,
CString* pcsMsg);
RGBQUAD QuadFromWord(WORD b16);
BOOL DibToSamps(HANDLE hDib,
int nSampsPerRow,
struct jpeg_compress_struct cinfo,
JSAMPARRAY jsmpPixels,
CString* pcsMsg);
};


 



更多文章請訪問


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990643/,如需轉載,請註明出處,否則將追究法律責任。

相關文章