-
大小: 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传输&即时通信
评论
共有 条评论