使用zip库,有三个文件miniz.h、 zip.c、 zip.h
下载这三个文件,将它们加入到工程中。
创建一个mfc对话框工程,添加一个按钮,为按钮的响应函数添加如下代码:
#include "..\thirdparty\zip\zip.h"
void CzipMFCSampleDlg::OnBnClickedClipboardPng() { // TODO: 在此添加控件通知处理程序代码 if (OpenClipboard()) { HBITMAP handle = (HBITMAP)GetClipboardData(CF_BITMAP); if (NULL == handle) return; CImage imgTemp; // CImage是MFC中的类。 imgTemp.Attach(handle); HGLOBAL hMemBmp = GlobalAlloc(GMEM_MOVEABLE, 0); //可移动的缓冲区 if (hMemBmp == NULL) return; IStream *pStmImage = NULL; CreateStreamOnHGlobal(hMemBmp, FALSE, &pStmImage); //将内存区B作为流的起始 if (pStmImage == NULL) { GlobalFree(hMemBmp); AfxMessageBox(L"为空"); return; } imgTemp.Save(pStmImage, Gdiplus::ImageFormatPNG); // IStream流转成BYTE BYTE *pbyBmp = (BYTE *)GlobalLock(hMemBmp); //得到缓冲区的起始地址 GlobalUnlock(hMemBmp); //锁住内存 SIZE_T m_BufferSize = GlobalSize(hMemBmp); //得到格式转换后图片的大小 struct zip_t *zip = zip_open("testpng.zip", ZIP_DEFAULT_COMPRESSION_LEVEL, 'w'); { zip_entry_open(zip, "madia\\ttt.png"); { zip_entry_write(zip, pbyBmp, m_BufferSize); } zip_entry_close(zip); } zip_close(zip); CloseClipboard(); } }