我想知道是否有可能指示成像png编码器不要在1位png中添加任何gamma和chroma信息。
我正在为图像创建一个2色调色板

ColorPalette* pal = (ColorPalette*)CoTaskMemAlloc(sizeof(ColorPalette) + 2 * sizeof(ARGB));
pal->Count = 2;
pal->Flags = 0;
pal->Entries[0] = MAKEARGB(0,0,0,0);
pal->Entries[1] = MAKEARGB(0,255,255,255);
if (FAILED(res = sink->SetPalette(pal))) {
  return res;
}
CoTaskMemFree(pal);

然后就
BitmapData bmData;
bmData.Height = bm.bmHeight;
bmData.Width = bm.bmWidth;
bmData.Scan0 = bm.bmBits;
bmData.PixelFormat = PixelFormat1bppIndexed;

UINT bitsPerLine = imageInfo.Width * bm.bmBitsPixel;
UINT bitAlignment = sizeof(LONG) * 8;
UINT bitStride = bitAlignment * (bitsPerLine / bitAlignment);    // The image buffer is always padded to LONG boundaries
if ((bitsPerLine % bitAlignment) != 0) bitStride += bitAlignment; // Add a bit more for the leftover values
  bmData.Stride = bitStride / 8;

if (FAILED(res = sink->PushPixelData(&rect, &bmData, TRUE))) {
  return res;
}

生成的PNG图像非常大,包含以下无用的标题:
SRGB、GAMA、CHRM公司
实际上我只是在期待plte而不是srgb。如何设置编码器以跳过伽马和色度计算?

最佳答案

我还想知道是否有可能。我使用GDI+在一个C++程序中生成PNG的一个网站,PNG的颜色与CSS有不同的颜色,尽管我输入了完全相同的值。通过删除srgb,这可以解决大多数浏览器中的gamma问题。
我希望有办法解决这个问题!

09-04 17:05