#include <windows.h>
#include <Wincodec.h>
#pragma
comment(lib, "Windowscodecs.lib"
)
HRESULT PNG2WDP(WCHAR* szPngFileName, WCHAR*
szWdpFileName)
{
IWICImagingFactory *piFactory =
NULL;
IWICBitmapEncoder *piEncoder =
NULL;
IWICBitmapDecoder *piDecoder =
NULL;
IWICBitmapFrameEncode *piBitmapFrame =
NULL;
IWICBitmapFrameDecode *piBitmapFrameIn =
NULL;
IPropertyBag2 *pPropertybag =
NULL;
IWICStream *piStream =
NULL;
IWICStream *piStreamIn =
NULL;
UINT uiWidth = 0;
UINT
uiHeight = 0;
ULONG counter =
0;
CoInitialize(NULL);
HRESULT hr = CoCreateInstance(
CLSID_WICImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_IWICImagingFactory,
(LPVOID*)
&piFactory);
if
(SUCCEEDED(hr))
{
hr =
piFactory->CreateStream(&piStream);
}
if
(SUCCEEDED(hr))
{
hr =
piStream->InitializeFromFilename(szWdpFileName,
GENERIC_WRITE);
}
if
(SUCCEEDED(hr))
{
hr =
piFactory->CreateStream(&piStreamIn);
}
if
(SUCCEEDED(hr))
{
hr =
piStreamIn->InitializeFromFilename(szPngFileName,
GENERIC_READ);
}
if
(SUCCEEDED(hr))
{
hr =
piFactory->CreateEncoder(GUID_ContainerFormatWmp, NULL,
&piEncoder);
}
if
(SUCCEEDED(hr))
{
hr =
piEncoder->Initialize(piStream,
WICBitmapEncoderNoCache);
}
if (SUCCEEDED(hr))
{
hr =
piEncoder->CreateNewFrame(&piBitmapFrame,
&pPropertybag);
}
if(SUCCEEDED(hr))
{
hr =
piFactory->CreateDecoder(GUID_ContainerFormatPng, NULL,
&piDecoder);
}
if
(SUCCEEDED(hr))
{
hr =
piDecoder->Initialize(piStreamIn,
WICDecodeMetadataCacheOnDemand);
}
if(SUCCEEDED(hr))
{
hr = piDecoder->GetFrame(0,
&piBitmapFrameIn);
}
if (SUCCEEDED(hr))
{
//
This is how you customize the TIFF
output.
PROPBAG2 option = {
0 };
//option.pstrName =
L"TiffCompressionMethod";
//VARIANT varValue;
//VariantInit(&varValue);
//varValue.vt = VT_UI1;
//varValue.bVal = WICTiffCompressionZIP;
//hr = pPropertybag->Write(1,
&option, &varValue);
if
(SUCCEEDED(hr))
{
hr =
piBitmapFrame->Initialize(pPropertybag);
}
}
if (SUCCEEDED(hr))
{
hr =
piBitmapFrameIn->GetSize(&uiWidth,
&uiHeight);
hr =
piBitmapFrame->SetSize(uiWidth, uiHeight);
}
WICPixelFormatGUID formatGUID =
GUID_WICPixelFormat32bppBGRA;
if (SUCCEEDED(hr))
{
hr =
piBitmapFrameIn->GetPixelFormat(&formatGUID);
hr = piBitmapFrame->SetPixelFormat(&formatGUID);
}
if
(SUCCEEDED(hr))
{
//
We‘re expecting to write out 24bppRGB. Fail if the encoder cannot do
it.
hr =
IsEqualGUID(formatGUID, GUID_WICPixelFormat32bppBGRA) ? S_OK :
E_FAIL;
if( FAILED(hr)
)
{
hr =
IsEqualGUID(formatGUID, GUID_WICPixelFormat24bppBGR) ? S_OK :
E_FAIL;
}
}
if
(SUCCEEDED(hr))
{
{
IWICBitmap *pIBitmap =
NULL;
IWICBitmapLock *pILock =
NULL;
WICRect
rcLock = { 0, 0, uiWidth, uiHeight
};
// Create the bitmap from the image
frame.
if
(SUCCEEDED(hr))
{
hr =
piFactory->CreateBitmapFromSource(
piBitmapFrameIn, // Create a bitmap from the image
frame
WICBitmapCacheOnDemand, // Cache
metadata when
needed
&pIBitmap);
// Pointer to the
bitmap
hr = pIBitmap->Lock(&rcLock, WICBitmapLockWrite,
&pILock);
BYTE *pv =
NULL;
UINT cbStride =
0;
UINT cbBufferSize =
0;
// Retrieve a pointer to the pixel
data.
if
(SUCCEEDED(hr))
{
hr = pILock->GetDataPointer(&cbBufferSize,
&pv);
}
cbStride = cbBufferSize /
uiHeight;
hr = piBitmapFrame->WritePixels(uiHeight, cbStride, cbBufferSize,
pv);
counter =
pILock->Release();
counter =
pIBitmap->Release();
pv = NULL;
}
}
//
else
{
// hr =
E_OUTOFMEMORY;
}
}
if
(SUCCEEDED(hr))
{
hr =
piBitmapFrame->Commit();
}
if
(SUCCEEDED(hr))
{
hr =
piEncoder->Commit();
}
if
(piFactory)
counter =
piFactory->Release();
if
(piBitmapFrame)
counter =
piBitmapFrame->Release();
if(piBitmapFrameIn)
counter = piBitmapFrameIn->Release();
if(piDecoder)
counter = piDecoder->Release();
if
(piEncoder)
counter =
piEncoder->Release();
if
(piStream)
counter =
piStream->Release();
if(piStreamIn)
counter = piStreamIn->Release();
if(
pPropertybag )
counter =
pPropertybag->Release();
CoUninitialize();
return
hr;
}
使用WIC组件转换图片格式
时间: 2024-12-17 16:42:45
使用WIC组件转换图片格式的相关文章
PDF文件格式转换攻略:PDF格式转换图片格式
关于PDF文件格式的转换大家有了解多少吗?就比如将PDF格式转换成图片格式,可能之前大家对于PDF件大家都有了解到,办公中我们经常遇到过.现在小编在这里教大家如何将PDF格式转换成图片格式,有兴趣的伙伴可以学着尝试一下! 1.操作之前可以将转换成图片格式的PDF文件另存到电脑桌面上,这样便于在后面的操作. 2.打开PDF转换器进入到操作的页面,在操作页面中可以选择到"PDF转成其他文件"栏目下的功能"文件转换图片",这一步完成之后,然后继续进行下一步操作.3.这时候
Windows如何打开heic 哪个软件可以转换图片格式
对于很多刚刚使用苹果手机的朋友应该都会有一个疑问,为什么我拍的照片在电脑上打不开,发给别人也打不开,是不是很多人会遇到这样的问题呢?答案毋庸置疑,其实对于苹果的老用户来说应该都是知道这是为什么的,对于新用户小编想说的是这是由于系统格式的不同导致的,苹果自iOS11系统之后默认的是heic图片格式,在电脑和安卓中都无法直接查看,需要将其格式转换成电脑或安卓可以兼容的图片格式,那Windows如何打开heic,哪个软件可以转换图片格式呢?1.想打开heic格式图片,要把格式转换一下,电脑可见的图片格
Mac电脑如何转换图片格式?ImageWell for Mac转换图片格式教程
想用Mac电脑转换图片格式?我想你可以借助ImageWell for Mac软件!ImageWell是一款简单好用的的图像处理工具,具有显示,编辑,处理,保存等功能.下面小编来为大家演示在Mac电脑上使用ImageWell for Mac转换图片格式教程,希望对大家有所帮助! https://www.macdown.com ImageWell for Mac转换图片格式教程 ImageWell for Mac使用起来非常的方便,把图片拖进去就可以打开.接下来小编以酷狗音乐软件为例为大家演示转换图
利用PhotoShop批量压缩和转换图片格式
[摘要] 从单反相机中导出的照片,为保证照片质量,方便后期调整,摄影爱好者经常会在相机中将照片格式设置为.NEF,现在想转换为JPEG的格式,一张张处理太麻烦,有没有批量处理的方法?强大的PhotoShop可以帮我们自动搞定. [正文] NEF格式照片的调整方式 单反相机照相,为方便后期调整,可以将照片格式设置为NEF格式,这样如果以photoshop方式打开,自动就出现照片处理对话框,如图所示: 右边弹出的调整面板,可以方便调整曝光度和对比度等. 但如果想把照片放到手机内,或者处理好的照片希望
Ubuntu在命令行下面转换图片格式
尽管你可以使用GIMP来进行图纸格式的转换,但是操作还是有的麻烦.一个比较容易的方法是使用Imagemagick软件.安装完成以后,就可以 使用convert命令.convert命令非常简单,譬如: convert filename.jpg filename.bmp 如果你使用JPEG等大小和图片质量有关的图形格式化,可以使用-quality参数.参数的数值在0至100之间,数值越大文件越大,通 常情况下,60-80就可以了,譬如: convert -quality 80 filename.bm
java批量转换图片格式
废话不多直接上代码,代码其实也不多.... package com.qiao.testImage; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.imageio.ImageIO; public class imageChange { public
ImageMagick 转换图片格式
[[email protected]666 drawable-hdpi-v4]# convert ic_launcher.jpeg ic_launcher.png [[email protected]666 drawable-hdpi-v4]# file ic_launcher.png ic_launcher.png: PNG image data, 72 x 72, 8-bit/color RGB, non-interlaced [[email protected]666 drawable-h
bmp,jpg,png,tif,wmf,emf与eps图片格式转换
wmf/emf是两种Microsoft Windows的图形文件格式.它是一个矢量图格式,但是也允许包含位图.本质上,一个WMF文件保存一系列可以用来重建图片的Windows GDI命令.在某种程度上,它类似于印刷业广泛使用的PostScript格式. 关于wmf2eps安装使用的问题可参考如下两个网页. http://www.kellogg.northwestern.edu/rc/miktex-install.htm http://www.wolf-s.homepage.t-online.de
批量改变文件夹和子文件夹中图片格式的两种方法
生活中,我们通常会遇到这种问题:一个文件夹内部有多个子文件夹,每个文件夹内部有很多图片,我们想改变这些图片的格式. 例如.png格式图片支持背景透明,但我们想把它变成背景不透明的.jpg图片.又比如.bmp格式是非压缩图片,我们想把它转换为无损压缩的.png图片以节省存储空间. 如果图片数量很少,很明显我们可以通过Windows自带的画图工具或者其他看图软件通过“另存为”一张张地转换图片格式.但是如果图片很多,怎么办? 这个问题其实有两个关键点: ① 要求批量处理. ② 文件夹中还有子文件夹.