• 把剪贴板中的图片保存到zip文件中


    使用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();
        }
    
    }
  • 相关阅读:
    模式对象管理
    Oracle数据库实例
    github使用简介
    Oracle数据库安装与连接与简介
    利益相关者分析
    问题账户需求分析
    2018春季学期需求工程概论阅读计划
    JAXB在Java 9/10并且使用Tomcat 9的问题
    mysql 备份 恢复
    IntelliJ IDEA安装bower
  • 原文地址:https://www.cnblogs.com/sinceret/p/16022717.html
Copyright © 2020-2023  润新知