常用的圖象處理函式的整理 (轉)
常用的圖象處理的整理
鄧振波
在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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL中的常用的字串處理函式大全SQL字串函式
- 常用函式整理函式
- SQL Server常用函式整理SQLServer函式
- 雜篇:Android繪製函式圖象及正弦函式的介紹Android函式
- Python基礎學習篇-4-常用的正規表示式處理函式Python函式
- JavaScript 非同步函式的 Promisification 處理JavaScript非同步函式
- PHP常用函式歸類【持續整理】PHP函式
- 陣列處理函式陣列函式
- mListView.setOnItemClickListener的函式失效的處理辦法。View函式
- Js常用的函式JS函式
- 常用的Css函式CSS函式
- python的常用函式Python函式
- photoshop常用圖片處理技巧
- c語言是如何處理函式呼叫的?C語言函式
- oracle Forms Builder常用函式 (轉載)OracleORMUI函式
- 轉MySQL--mysql常用函式打全MySql函式
- Golang 常用的 strings 函式Golang函式
- (特徵工程實戰)ML最實用的資料預處理與特徵工程常用函式!特徵工程函式
- 【封裝小技巧】列表處理函式的封裝封裝函式
- Flink處理函式實戰之四:視窗處理函式
- Sanic 處理函式修飾器函式
- mongoDB中聚合函式java處理MongoDB函式Java
- JavaScript 註冊事件處理函式JavaScript事件函式
- echarts 繫結事件處理函式Echarts事件函式
- C語言之字串處理函式C語言字串函式
- JavaScript常用的字串處理方法JavaScript字串
- python 的幾個常用的函式Python函式
- Flink處理函式實戰之五:CoProcessFunction(雙流處理)函式Function
- 【封裝小技巧】數字處理函式的封裝封裝函式
- excel中最常用的30個函式 excel表格常用函式技巧大全Excel函式
- 手寫JavaScript常用的函式JavaScript函式
- 總結常用的字串函式字串函式
- 字串比較的常用函式字串函式
- Mysql 常用函式(1)- 常用函式彙總MySql函式
- laravel函式整理Laravel函式
- JavaScript 批量註冊事件處理函式JavaScript事件函式
- 六、函式、包和錯誤處理函式
- 常用函式函式
- 如何在 Go 中優雅的處理和返回錯誤(1)——函式內部的錯誤處理Go函式