日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用CxImage进行图形和格式转换(CBitmap to jpg or png or gif or bmp)

發布時間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用CxImage进行图形和格式转换(CBitmap to jpg or png or gif or bmp) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CxImage類庫介紹
CxImage類庫是一個幾乎可以管理所有的圖象文件的C++類庫。它可以快捷地存取、顯示、轉換各種圖像。
其他的圖形庫?有那么多優秀的圖形庫,如OpenIL,FreeImage,PaintLib等等,它們是功能強大,齊全,而且是經常更新的。然而,如果你要使用他們,你可能會遇到一些麻煩,,因為它們大部分是平臺無關的,用C語言寫成,有的還夾雜著基本的C++ wrapper和大量的編譯選項的聲明需要你去處理。現在,一個新的GDI+類庫來了,或許CxImage不是最有用的,但是至少你是有源代碼的。這個類庫不是MFC類庫,完全是一個windows類庫,因為一些特殊的構造和繪圖函數,但是基礎是平臺無關的。

一.在你的程序中使用CxImage(Using MFC in Shared DLL + Debug 模式)

1.下載CxImage類庫
地址:http://www.xdp.it/download.htm

??????????http://www.codeproject.com/bitmap/cximage.asp

下載Download full source files (full) - 2.10 Mb?

2.解壓壓縮包,并編譯Demo2/Console.dsw,這個過程可能比較慢,中間文件為60M?

3.編譯完成后搜索*.lib文件,一共搜索出10個文件,把它們復制到你的工程目錄中(任意)
它們分別為:CxImage.lib Jpeg.lib png.lib Tiff.lib jbig.lib zlib.lib j2k.lib cximagecrtd.lib(最后一個為靜態MFC庫時使用)

4.找到壓縮包中的CxImage文件夾,把它里面的所有.h頭文件,復制到你的工程目錄中(任意)

5.在StdAfx.h文件中,添加這些文件

  • // stdafx.h : include file for standard system include files,
  • // or project specific include files that are used frequently, but
  • // are changed infrequently
  • //
  • #if !defined(AFX_STDAFX_H__84F27293_E63B_443C_BA35_5322307D48DA__INCLUDED_)
  • #define AFX_STDAFX_H__84F27293_E63B_443C_BA35_5322307D48DA__INCLUDED_
  • #if _MSC_VER > 1000
  • #pragma once
  • #endif // _MSC_VER > 1000
  • #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
  • #include <afxwin> // MFC core and standard components
  • #include <afxext> // MFC extensions
  • #include <afxdisp> // MFC Automation classes
  • #include <afxdtctl> ?? // MFC support for Internet Explorer 4 Common Controls
  • #ifndef _AFX_NO_AFXCMN_SUPPORT
  • #include <afxcmn> ?? // MFC support for Windows Common Controls
  • #endif // _AFX_NO_AFXCMN_SUPPORT
  • //添加CxImage到你的程序中(目錄為你上面添加位置,我把它們放在了lib文件夾中了)
  • #include "lib/ximage.h"
  • //#pragma comment(lib,"lib/cximagecrtd.lib") //靜態鏈接庫時使用
  • #pragma comment(lib,"lib/cximage.lib")
  • #pragma comment(lib,"lib/Jpeg.lib")
  • #pragma comment(lib,"lib/consoled.lib")
  • #pragma comment(lib,"lib/png.lib")
  • #pragma comment(lib,"lib/zlib.lib")
  • #pragma comment(lib,"lib/tiff.lib")
  • #pragma comment(lib,"lib/jasper.lib")
  • #pragma comment(lib,"lib/j2k.lib")
  • #pragma comment(lib,"lib/jbig.lib")
  • //{{AFX_INSERT_LOCATION}}
  • // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  • #endif // !defined(AFX_STDAFX_H__84F27293_E63B_443C_BA35_5322307D48DA__INCLUDED_)
  • 6.這樣就可以在你的程序中使用CxImage類了

    7.演示程序

  • void CTestDlg::OnButton1()
  • {
  • // TODO: Add your control notification handler code here
  • //取得你的圖片資源文件IDB_BITMAP1
  • HBITMAP bitmap = ::LoadBitmap(AfxGetInstanceHandle(),
  • MAKEINTRESOURCE(IDB_BITMAP1));
  • //創建對象
  • CxImage *newImage = new CxImage();
  • newImage->CreateFromHBITMAP(bitmap);
  • //存儲為文件,我發現的可以使用的有6個格式有三個格式未使用成功(gif,wbmg,wmf)....夠用了吧?
  • newImage->Save("image.bmp",CXIMAGE_FORMAT_BMP); //注意不是CXIMAGE_SUPPORT_BMP
  • newImage->Save("image.tga",CXIMAGE_FORMAT_TGA);
  • newImage->Save("image.pcx",CXIMAGE_FORMAT_PCX);
  • newImage->Save("image.jpg",CXIMAGE_FORMAT_JPG);
  • newImage->Save("image.png",CXIMAGE_FORMAT_PNG);
  • newImage->Save("image.tiff",CXIMAGE_FORMAT_TIF);
  • newImage->Save("image.gif",CXIMAGE_FORMAT_GIF); //不成功,只能讀取第一貞圖片?
  • newImage->Save("image.wbmp",CXIMAGE_FORMAT_WBMP); //不成功
  • newImage->Save("image.wmf",CXIMAGE_FORMAT_WMF); //不成功
  • newImage->Save("image.mng",CXIMAGE_FORMAT_MNG); //默認-未打開此項功能
  • newImage->Save("image.jbig",CXIMAGE_FORMAT_JBG); //默認-未打開此項功能
  • /*
  • * CxImage配置文件ximacfg.h
  • * #define CXIMAGE_SUPPORT_BMP 1 //可用狀態(即不可取得和轉換成這種格式)
  • * #define CXIMAGE_SUPPORT_MNG 0 //不可用狀態
  • */
  • }
  • 其他說明
    1.所支持的格式(in Doc)
    formats?#define?required libraries?size [Kbyte]?BMP?
    GIF?
    ICO?
    TGA?
    PCX?
    WBMP?
    WMF CXIMAGE_SUPPORT_BMP?
    CXIMAGE_SUPPORT_GIF?
    CXIMAGE_SUPPORT_ICO?
    CXIMAGE_SUPPORT_TGA?
    CXIMAGE_SUPPORT_PCX?
    CXIMAGE_SUPPORT_WBMP?
    CXIMAGE_SUPPORT_WMF?
    built in?
    24 JPEG CXIMAGE_SUPPORT_JPG?
    jpeg?
    88 PNG CXIMAGE_SUPPORT_PNG?
    png, zlib?
    104 MNG CXIMAGE_SUPPORT_MNG?
    mng, zlib, jpeg?
    148 TIFF CXIMAGE_SUPPORT_TIF?
    tiff, zlib, jpeg?
    124 JBIG CXIMAGE_SUPPORT_JBG?
    jbig?
    28 PNM,PPM,PGM?
    RAS CXIMAGE_SUPPORT_PNM?
    CXIMAGE_SUPPORT_RAS?
    jasper?
    176 JPEG-2000 CXIMAGE_SUPPORT_JP2?
    CXIMAGE_SUPPORT_JPC?
    CXIMAGE_SUPPORT_PGX?
    jasper?
    176?
    2.格式轉換示例

  • CxImage image;
  • // bmp -> jpg
  • image.Load("image.bmp", CXIMAGE_FORMAT_BMP);
  • if (image.IsValid()){
  • if(!image.IsGrayScale()) image.IncreaseBpp(24);
  • image.SetJpegQuality(99);
  • image.Save("image.jpg",CXIMAGE_FORMAT_JPG);
  • }
  • // png -> tif
  • image.Load("image.png", CXIMAGE_FORMAT_PNG);
  • if (image.IsValid()){
  • image.Save("image.tif",CXIMAGE_FORMAT_TIF);
  • }
  • 3.使用CxImage(In Doc),至今未弄懂....也沒按這個弄好過...不知道為什么

  • Project Settings
  • |- C/C++
  • | |- Code Generation
  • | | |- Use run-time library : Multithreaded DLL (must be the same for
  • | | | all the linked libraries)
  • | | |- Struct member alignment : must be the same for all the linked
  • | | | libraries
  • | |- Precompiled headers : not using precompiled headers
  • | |- Preprocessor
  • | |- Additional Include Directories: ..cximage
  • |- Link
  • |- General
  • |- Object/library modules: ../png/Debug/png.lib
  • ../jpeg/Debug/jpeg.lib
  • ../zlib/Debug/zlib.lib
  • ../tiff/Debug/tiff.lib
  • ../jasper/Debug/jasper.lib
  • ../cximage/Debug/cximage.lib ...


  • 二.使用CxImage(Using MFC in a Static Library + Debug 模式)
    1.解壓壓縮包,打開Demo2/Console.dsw,設置如下:
    Project -> Setting -> Using MFC in a Static Library(注意是所有的項目都設置成這個)
    2.確保c/c++ -> Code Generation -> Using run-time library 為 Mutithreaded
    3.Debug模式下編譯,搜索*.lib文件,復制到工程目錄,包含進工程(當前工程也必須是Using MFC in a Static Library + Debug 模式),即可,包含方法同上
    注意:生成的LIB文件,比上面要少一個....不知道為什么...少了consoled.lib,但并無大礙,不包含它即可

    三.使用CxImage(Using MFC in a Static Library + Realese 模式)
    1.解壓壓縮包,打開Demo2/Console.dsw,設置如下:
    Project -> Setting -> Using MFC in a Static Library(注意是所有的項目都設置成這個)
    2.確保c/c++ -> Code Generation -> Using run-time library 為 Mutithreaded
    3.Realese模式下編譯,搜索*.lib文件,復制到工程目錄,包含進工程(當前工程也必須是Using MFC in a Static Library + Realese模式),即可,包含方法同上
    注意:生成的LIB文件,同樣是少一個,不包含它即可

    參考:
    Open the CxImage workspace with all the libraries. Select Project->Properties. Select each project in the list and make sure they all have the same settings for the MFC library (Not Using MFC for a static library). Then select the C/C++ tab and select Code Generation in the combo box. In the Use Run-time Library combo box, make sure all of them are set to Single-Threaded (or multi threaded depending on your settings). Then remake all the libraries and try to recompile your project
    Thanks Kelly. It works! Thanks again!:) It turns out that CxImage static lib projects, in my case, are not set uniformly the same; some uses MFC shared library while some uses MFC static library

    總結

    以上是生活随笔為你收集整理的使用CxImage进行图形和格式转换(CBitmap to jpg or png or gif or bmp)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。