• 大小: 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  XPstyle.manifest

     文件     200704  2010-05-25 19:40  截图6.0版.exe

----------- ---------  ---------- -----  ----

               641200                    22


评论

共有 条评论