-
大小: 181KB文件類型: .rar金幣: 1下載: 0 次發布日期: 2021-06-11
- 語言: 其他
- 標簽:
資源簡介
最近搜索了些在內存中轉換圖片格式的東西,比如截屏后的bmp圖片在內存中轉為jpg數據流,你可以通過socket發送這段jpg內存數據流,同時,你也可以通過內存數據流逆轉換。通過DibFile.h里面的兩個函數完成(用的是Gdi+庫):
Bitmap* CreateBitmapFromMemory(const void *buf, size_t size);
void* SaveBitmapToMemory(Bitmap *image, void **outbuf, size_t *size, size_t CodecIndex=0, ULONG quality=50);
說明:CodecIndex取值0-4,分別對應轉換為jpg、bmp、gif、png、tiff格式,當為0時,參數quality有用,表示轉換jpg的質量,取值0-100,數值越小,壓縮比越大。注意:outbuf為指針的指針,會在內部malloc內存,以保存轉換后的圖片數據流。
雖然此軟件中沒用到這兩個函數,但是測試通過。
你可以進行如下測試:把jpg圖片以二進制數據讀到內存中,然后通過CreateBitmapFromMemory函數構建Bitmap,然后再SaveBitmapToMemory轉換為另一段內存中,把這段內存以二進制數據存入文件,并用其他看圖軟件打開保存后的圖片。
其他說明:此軟件在先前版本的基礎上修正兩處Bug:
1.保存圖片時,若文件名含有點,會保存失敗;
2.若在瀏覽圖片時,另存圖片后,滾動滾輪顯示未知格式圖片。
加入一個功能:保存為jpg圖片時,可以選擇圖片質量。
有問題聯系:hastings1986@163.com
代碼片段和文件信息
/*---------------------------------
DIBFILE.C?--?DIB?File?Functions
---------------------------------*/
#include?“StdAfx.h“
#include?
using?std::cout;
static?OPENFILENAME?m_ofn?;
void?DibFileInitialize?(HWND?hwndTCHAR*?szFilter)
{
m_ofn.lStructSize???????=?sizeof?(OPENFILENAME)?;
m_ofn.hwndOwner?????????=?hwnd?;
m_ofn.hInstance?????????=?NULL?;
m_ofn.lpstrFilter???????=?szFilter?;
m_ofn.lpstrCustomFilter?=?NULL?;
m_ofn.nMaxCustFilter????=?0?;
m_ofn.nFilterIndex??????=?0?;
m_ofn.lpstrFile?????????=?NULL?;??????????//?Set?in?Open?and?Close?functions
m_ofn.nMaxFile??????????=?MAX_PATH?;
m_ofn.lpstrFiletitle????=?NULL?;??????????//?Set?in?Open?and?Close?functions
m_ofn.nMaxFiletitle?????=?MAX_PATH?;
m_ofn.lpstrInitialDir???=?NULL?;
m_ofn.lpstrtitle????????=?NULL?;
m_ofn.Flags?????????????=?0?;?????????????//?Set?in?Open?and?Close?functions
m_ofn.nFileOffset???????=?0?;
m_ofn.nFileExtension????=?0?;
m_ofn.lpstrDefExt???????=?TEXT?(“jpg“)?;
m_ofn.lCustData?????????=?0?;
m_ofn.lpfnHook??????????=?NULL?;
m_ofn.lpTemplateName????=?NULL?;
}
BOOL?DibFileOpenDlg?(HWND?hwnd?PTSTR?pstrFileName?PTSTR?pstrtitleName?TCHAR*?szFilter)
{
m_ofn.hwndOwner?????????=?hwnd?;
if(szFilter)
m_ofn.lpstrFilter???????=?szFilter?;
m_ofn.lpstrFile?????????=?pstrFileName?;
m_ofn.lpstrFiletitle????=?pstrtitleName?;
m_ofn.Flags?????????????=?0?;
return?GetOpenFileName?(&m_ofn)?;
}
BOOL?DibFileSaveDlg?(HWND?hwnd?PTSTR?pstrFileName?PTSTR?pstrtitleName?TCHAR*?szFilter)
{
m_ofn.hwndOwner?????????=?hwnd?;
if(szFilter)
m_ofn.lpstrFilter???????=?szFilter?;
m_ofn.lpstrFile?????????=?pstrFileName?;
m_ofn.lpstrFiletitle????=?pstrtitleName?;
m_ofn.Flags?????????????=?OFN_OVERWRITEPROMPT?;
return?GetSaveFileName?(&m_ofn)?;
}
BITMAPFILEHEADER?*?DibLoadImage?(LPCTSTR?pstrFileName)
{
BOOL???????????????bSuccess?;
DWORD??????????????dwFileSize?dwHighSize?dwBytesRead?;
HANDLE?????????????hFile?;
BITMAPFILEHEADER?*?pbmfh?;
hFile?=?CreateFile?(pstrFileName?GENERIC_READ?FILE_SHARE_READ?NULL
OPEN_EXISTING?FILE_FLAG_SEQUENTIAL_SCAN?NULL)?;
if?(hFile?==?INVALID_HANDLE_VALUE)
return?NULL?;
dwFileSize?=?GetFileSize?(hFile?&dwHighSize)?;
if?(dwHighSize)
{
CloseHandle?(hFile)?;
return?NULL?;
}
pbmfh?=?(BITMAPFILEHEADER?*)malloc?(dwFileSize)?;
if?(!pbmfh)
{
CloseHandle?(hFile)?;
return?NULL?;
}
bSuccess?=?ReadFile?(hFile?pbmfh?dwFileSize?&dwBytesRead?NULL)?;
CloseHandle?(hFile)?;
if?(!bSuccess?||?(dwBytesRead?!=?dwFileSize)?????????
||?(pbmfh->bfType?!=?*?(WORD?*)?“BM“)?
||?(pbmfh->bfSize?!=?dwFileSize))
{
free?(pbmfh)?;
return?NULL?;
}
return?pbmfh?;
}
BOOL?DibSaveImage?(LPCTSTR?pstrFileName?BITMAPFILEHEADER?*?pbmfh)
{
BOOL???bSuccess?;
DWORD??dwBytesWritten?;
HANDLE?hFile?;
hFile?=?CreateFile?(pstrFileName?GENERIC_WRITE?0?NULL
CREATE_ALWAYS?FILE_ATTRIBUTE_NO
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1779??2008-04-20?18:21??14.bmp
?????文件???????3262??2008-04-20?18:33??14.cur
?????文件??????99328??2010-05-25?19:40??14.ncb
?????文件????????238??2010-05-25?19:40??14.plg
?????文件???????4870??2010-05-25?14:07??14.dsp
?????文件????????527??2008-04-19?21:18??14.dsw
?????文件??????53760??2010-05-25?19:40??14.opt
?????文件???????7390??2008-06-14?17:02??attack.wav
?????文件??????58662??2008-04-20?21:42??beijin.bmp
?????文件???????2238??2009-01-12?18:59??Cross.cur
?????文件??????35714??2010-05-25?19:13??DibFile.cpp
?????文件???????4845??2010-05-25?19:14??DibFile.h
?????文件??????45542??2010-05-25?19:40??GDITest.cpp
?????文件????????873??2010-05-25?14:35??HasPtr.h
?????文件????????766??2009-01-08?21:33??icon1.ico
?????文件?????109812??2010-05-25?19:26??Res.aps
?????文件???????7424??2010-05-25?19:26??Res.rc
?????文件???????1487??2010-05-25?18:36??resource.h
?????文件????????772??2010-05-25?19:12??StdAfx.h
?????文件????????651??2008-06-11?09:34??thread.h
?????文件????????556??2008-06-18?15:07??XPst
?????文件?????200704??2010-05-25?19:40??截圖6.0版.exe
-----------?---------??----------?-----??----
???????????????641200????????????????????22
- 上一篇:帶中文字庫的12864LCD顯示程序
- 下一篇:IPv6傳輸&即時通信
評論
共有 條評論