gpt4 book ai didi

c++ - 强制 WIC 将图像数据视为 RGB

转载 作者:行者123 更新时间:2023-11-30 03:54:07 27 4
gpt4 key购买 nike

我有一个 BYTE 数组形式的图像(RGB 格式),我需要对其进行编码。我做了,但是颜色变了。

/*Create stream and initialized*/
hr = piFactory->CreateStream(&piStream);
hr = piStream->InitializeFromFilename(L"..\\test.jpg",GENERIC_WRITE);

/*created an encoder. I want to save JPG*/
hr = piFactory->CreateEncoder(GUID_ContainerFormatJpeg, NULL, &piEncoder);

做了一些操作,也尝试设置像素格式。

hr = piBitmapFrame->SetPixelFormat(&formatGUID);

但它总是设置为“GUID_WICPixelFormat24bppBGR”

我在这里写图像数据。

/*pBitmap contains image data*/
hr = piBitmapFrame->WritePixels(lHeight, cbStride, cbBufferSize, pBitmap);

问题是图像的颜色发生了变化,我发现如果我将 RGB 更改为 BGR,则输出看起来不错。所以我做了这个

   for(int i = 0; i < DataSize; i += 3)
{
inBuff[i] = pBitmap[i+2];
inBuff[i + 1] = pBitmap[i+1];
inBuff[i + 2] = pBitmap[i];
}

pBitmap = inBuff

但我不想在这里花费更多时间遍历整个图像。我需要告诉 WIC“将数据视为 RGB(或 BGR)”。

这可能吗?如果是那么怎么办?

最佳答案

您可以先创建位图。那时你可以说它需要的格式。这是“24bppRGB”格式:

    hr = piFactory->CreateBitmapFromMemory(
lWidth,
lHeight,
GUID_WICPixelFormat24bppRGB,
cbStride,
cbBufferSize,
pBitmap,
&piBitmapSrc
);

这就是将图像数据写入框架的方式:

hr = piBitmapFrame->WritePixels(lHeight, cbStride, cbBufferSize, pBitmap);

而是像这样将图像写入框架(因为 WritePixels() 不接受位图):

    hr = piBitmapFrame->WriteSource(
piBitmapSrc,
NULL
);

这有助于避免循环。不过,我不确定 CreateBitmapFromMemory() 内部发生了什么。由于您关心时间,我不知道这是否有帮助(它仍然可以使您的代码更好)。

关于c++ - 强制 WIC 将图像数据视为 RGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29737917/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com