【只争朝夕】

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

使用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();
    }

}

 

posted on 2022-03-18 17:21  【只争朝夕】  阅读(138)  评论(0)    收藏  举报