Je me demande s'il est possible de demander au codeur PNG d'imagerie de ne pas ajouter d'informations de gamma et de chrominance à un PNG 1 bit.Empêcher l'encodeur GDI + PNG d'ajouter des informations gamma à un PNG 1 bit
Je crée une palette de 2 couleurs pour l'image
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);
et puis juste
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;
}
L'image résultante PNG est une façon de grand et contient les en-têtes inutiles suivants:
sRGB, gAMA, cHRM
Je n'attendais que PLTE et non sRGB. Comment dois-je configurer l'encodeur pour ignorer les calculs de gamma et de chrominance?
Pas encore de réponse de MS :(Etant donné que toutes ces données MS sont des sources fermées, nous ne sommes pas en mesure de vérifier pourquoi elles ont créé ce segment sRGB – philk