Кодировать QImage в png, используя WIC?

Я пытаюсь проверить производительность между WIC и функцией кодирования из QT. Но я не могу найти способ кодирования из QImage (объект QT) в PNG с использованием WIC.

Кодер из WIC должен быть инициализирован из IStream, который должен предоставлять те же данные, что и файл изображения. Но у меня есть что-то вроде растрового изображения.

Кто-нибудь может помочь мне? Любой комментарий будет оценен.

0

Решение

Это может быть легко сделано. Я не знал, как использовать кодировщик. 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();
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]