使用WIC将QImage编码为png?

时间:2014-04-16 10:10:32

标签: c++ qt wic

我正在尝试测试WIC与QT编码功能之间的性能。但我找不到使用WIC从QImage(QT对象)编码到PNG的方法。

WIC的编码器需要从IStream初始化,它应该提供与图像文件相同的数据。但我所拥有的是位图。

任何人都可以帮助我吗?任何评论都将不胜感激。

1 个答案:

答案 0 :(得分:2)

可以轻松完成。我不知道如何使用编码器。 IWICBitmapFrameEncode.WritePixels是放置原始像素的地方:

factory = CreateComObject(CLSID_WICImagingFactory);

IWICBitmapEncoder pngEncoder = factory.CreateEncoder(GUID_ContainerFormatPng, null);
pngEncoder.Initialize(targetStream, WICBitmapEncoderNoCache);

IPropertyBag2 propertyBag;
IWICBitmapFrameEncode frame = pngEncoder.CreateNewFrame(ref propertyBag);

frame.Initialize(propertyBag);

//Set the size of the image
frame.SetSize(640, 480);

//Request the encoder use this format.
Guid format = GUID_WICPixelFormat32bppPBGRA;

//If the encoder doesn't support that format, it will set format to the closest it does support
frame.SetPixelFormat(ref format);

//if the frame encoder doesn't support the pixel format we want to give it
//then we just cannot proceed
Assert(format == GUID_WICPixelFormat32bppPBGRA); 

frame.WritePixels(
     lineCount, 
     stride, 
     bufferSize, 
     pointerToPixelData);

frame.Commit();
pngEncoder.Commit();