1. 程式人生 > >C++使用GDI+實現圖片格式轉換

C++使用GDI+實現圖片格式轉換

主要是我在設定桌布時遇到的個小問題,因為設定桌布只能是bmp格式的圖片,不可能我喜歡的桌布就都是bmp格式的,就想怎麼轉換一下圖片的格式,於是就在百度搜怎麼弄,搜到了可行方法,卻沒有實現程式碼,有些看起來很費勁(很煩做例子還要用MFC的,程式碼看起來很費勁,直接C/C++多清爽簡潔啊),後來還是找到MSDN給出了官方的使用程式碼加上自己的一些小改動實現了轉bmp格式的程式碼,這裡記錄一下,省的以後要用的時候再去搜。

實現程式碼:

#include <iostream>
#include <Windows.h>
#include <gdiplus.h>


#pragma comment(lib,"Gdiplus.lib")


using namespace Gdiplus;


/* 
    通過字串獲得對應的CLSID
    format:影象格式,如:image/bmp
    pClsid:存放對應的CLSID
    成功返回對應的編碼器位置,失敗返回-1.
*/
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid);


int main(void)
{
    GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR gdiplusToken;
    // GDI+的任何操作之前應該先初始化
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);


    CLSID   encoderClsid;
    Status  stat;
    // 載入圖片
    Image*   image = new Image(L"C:\\Users\\Administrator\\Desktop\\2.jpg");
    // 獲取要轉換格式的CLSID
    GetEncoderClsid(L"image/bmp", &encoderClsid);
    // 根據CLSID儲存為對應格式的圖片
    stat = image->Save(L"C:\\Users\\Administrator\\Desktop\\Bird.bmp", &encoderClsid, NULL);


    if (stat == Ok)
        printf("Bird.png was saved successfully\n");
    else
        printf("Failure: stat = %d\n", stat);


    delete image;
    // 關閉GDI+
    GdiplusShutdown(gdiplusToken);
    // 轉換後就可以設定桌布啦
    SystemParametersInfo(20, 0, "C:\\Users\\Administrator\\Desktop\\Bird.bmp", 1);
    // 設定完成後可以刪除它,加個延時,不然可能還沒設定上就被刪除了
    Sleep(100);
    DeleteFile("C:\\Users\\Administrator\\Desktop\\Bird.bmp");
    return 0;


}


int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
    UINT  num = 0;          // 影象編碼器數量
    UINT  size = 0;         // 影象編碼器陣列大小


    ImageCodecInfo* pImageCodecInfo = NULL;


    GetImageEncodersSize(&num, &size);    // 獲取編碼器數量
    if (size == 0)
        return -1;  


    pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
    if (pImageCodecInfo == NULL)
        return -1;


    GetImageEncoders(num, size, pImageCodecInfo);    // 獲取本機支援的編碼器


    for (UINT j = 0; j < num; ++j)
    {
        if (wcscmp(pImageCodecInfo[j].MimeType, format) == 0)    // 找到該格式就將對應的CLSID給*pClsid
        {
            *pClsid = pImageCodecInfo[j].Clsid;
            free(pImageCodecInfo);
            return j;
        }
    }


    free(pImageCodecInfo);
    return -1;
}

相關推薦

C++使用GDI+實現圖片格式轉換

主要是我在設定桌布時遇到的個小問題,因為設定桌布只能是bmp格式的圖片,不可能我喜歡的桌布就都是bmp格式的,就想怎麼轉換一下圖片的格式,於是就在百度搜怎麼弄,搜到了可行方法,卻沒有實現程式碼,有些看起

GDI+實現圖片格式轉換(bmp、jpeg、gif、tiff、png) .

  引言:通過GDI+我們可以很方便的對bmp、jpeg、gif、tiff、png格式的圖片進行轉換。 步驟: 1)    通過GdiplusStartup初始化GDI+,以便後續的GDI+函式可以成功呼叫。 2)    通過GetImageEncodersSize獲取GD

Matlab實現圖片格式轉換 pgm轉jpg

% 本示例程式將 H:\me的論文\其他\另一個數據\lfwcrop_grey\lfwcrop_grey\faces\目錄下面所有的 pgm 圖片轉換為 jpg 圖片 % 如果僅對一張 pgm 圖片作格式轉換,請直接看核心程式碼部分。 function [ ] = pgm2jpg(

Matlab實現圖片格式轉換 pgm轉jpg等

    在Matlab下,轉換圖片格式相對比較容易,本文以 pgm 轉 jpg 為例,貼出示例程式: % 本示例程式將 C:\Users\kitty\test\目錄下面所有的 pgm 圖片轉換為 jpg 圖片 % 如果僅對一張 pgm 圖片作格式轉換,請直接看 核心程式

請問C#壓縮常見圖片格式(JPG)質量/解析度該如何實現

如何識別驗證碼VS2010開發C#工程怎麼用命令列分析計算程式碼度量值如何識別驗證碼VS2010開發C#工程怎麼用命令列分析計算程式碼度量值 C#可以寫伺服器端嗎C#類的解釋C#可以寫伺服器端嗎C#類的解釋 winformc#程式碼如何實現圖片只一個角變形通過asp.netC

利用GDI+圖片格式轉換(例如BMP轉PNG)

主要是先探測目標圖片的編碼器 然後在把資料以相應的編碼儲存起來。 如下為 BMP轉PNG的 做法. #include <windows.h> #include <gdiplus.h> #include <stdio.h> using nam

Python實現批量圖片格式轉換

    深度學習過程中總是繞不開資料集的製作,有時候實際圖片格式或大小可能與需要關心的圖片資訊不一致,那麼我們只能手動做好資料預處理,再進行training dataset.現在將介紹最簡單的格式轉換問題。可以支援批量圖片任意格式轉換。   直接上程式碼:# 將jpg格式轉位

python實現pdf格式轉換圖片格式

使用python程式碼實現pdf轉換圖片格式 核心程式碼: import io from wand.image import Image from wand.color import Color from PyPDF2 import PdfFileReader, PdfF

java實現擷取PDF指定頁並進行圖片格式轉換

1、引入依賴 <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.16&l

jpg圖片格式轉換dwg怎麽操作

這款軟件小編我為什麽說比較好呢?是因為這款軟件不僅能夠轉換文件格式而且還能夠對文件進行編輯,功能強大且能快速轉換,下面就以jpg圖片格式轉換dwg怎麽操作為例來給大家介紹一下使用這款軟件的操作步驟。 CAD編輯器下載http://www.downxia.com/d

java之圖片格式轉換

圖片格式轉換package fileTest; import java.awt.Color; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Arra

怎樣將普通的圖片格式轉換成PDF格式

電腦桌 mar 行操作 .com 需要 完成 分享 合並 word 大多時候我們處理格式間的轉換的對象多數為一些文件,如word、Excel、WPS等幾種辦公中常所使用到的。試過如何將圖片轉換成PDF格式了嗎?相信大部分的人都不知道如何操作,不妨試一下這種方法,小編將方法分

V4L2影象採集+圖片格式轉換(YUYV、RGB、JPEG)

本篇轉自博友https://blog.csdn.net/xuyangwyw/article/details/40476653文章,感謝分享。 廢話不多說,直接開始流程。 1、驅動支援     在那位法國牙醫的無私奉獻下,Linux核心幾乎支援所

怎樣將圖片格式轉換成PDF格式

電腦中儲存的圖片轉換成PDF格式該如何進行操作呢?下面就這個問題小編就將自己所知道的轉換方法告訴大家!1、首先可以將轉換成PDF格式的圖片儲存在一份新建的新資料夾中。2、接下來就可以藉助電腦端的PDF轉換軟體進行操作了。不過前提是電腦中要有PDF轉換器,沒有的話大家自行去下載。這個就不用小編教大家了吧!3、電

ASP NET2 0圖片格式轉換【月兒原創】

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

WPF 圖片格式轉換

            //FileStream imageStreamSource = File.OpenRead(srcPath);             FileStrea

RGBA 圖片格式轉換 RGB 無損

拿到的圖片是webp格式的,然後系統無法處理。只能使用google code的dwebp工具,把圖片轉成png或者jpg的。 這一步是ok了。 但是轉成的圖片是RGBA的,系統只能處理RGB。。。 報了下面的錯: java.lang.ArrayIndexOutOfBoundsEx

PyTorch使用seq2seq+attention實現時間格式轉換

pytorch實現seq2seq+attention轉換日期 使用keras實現加入注意力機制的seq2seq比較麻煩,所以這裡我嘗試使用機器翻譯的seq2seq+attention模型實現人造日期對標準日期格式的轉換。 所copy的程式碼來自practical-pytorch

spring mvc 圖片上傳+圖片格式轉換+圖片壓縮

利用springmvc進行圖片處理,本例中用到了imageio和谷歌壓縮工具類Thumbnails,下面是程式碼僅供參考,如有不足之可在下方留言或者自行更正 @RequestMapping("/uploadFile") @ResponseBody public Map<Str

常用的Emgu CV程式碼(主要有圖片格式轉換圖片裁剪,圖片翻轉,圖片旋轉和圖片平移等功能)

轉載自部落格 using System; using System.Drawing; using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; namespace ZNLGIS { public class Im