Question

Je suis un développeur débutant et j'ai besoin de votre aide avec quelque chose qui est probablement trivial pour vous.

J'ai données d'image dans ce format de pixel: 256 couleurs RGBA palettisée. Il vient de (PIX_FMT_PAL8) FFmpeg et il est expliqué ainsi:

PIX_FMT_RGB32 est traitée d'une manière spécifique à endian. un RGBA la couleur est mis en place comme:

(A << 24) | (R << 16) | (G << 8) | B

est stocké sous forme BGRA sur des architectures CPU little-endian et ARVB sur les processeurs grand-boutiste.

Lorsque le format de pixel est palettisée RGB (PIX_FMT_PAL8), les données d'image sont stockées dans palettisée AVFrame.data [0].

La palette est transportée dans AVFrame.data [1], est de 1024 octets de long (256 entrées 4 octets) et est mis en forme le même que dans PIX_FMT_RGB32 décrit ci-dessus (à savoir, il est également endian spécifique). Notez également que les différents composants de la palette RVB stockées dans AVFrame.data [1] doit être comprise entre 0..255.

AVFrame struct contient uint8_t *data[4] et int linesize[4] et ils sont décrits simplement avec:

  • uint8_t *data[4] = pointeur vers les plans d'image
  • quatre composantes sont données, c'est tout.
  • le dernier composant est alpha
  • int linesize[4] = nombre d'octets par ligne

Je struct AVFrame avec toutes les données nécessaires, mais je ne sais pas comment le gérer. Je dois créer un NSImage à partir de ces données d'image.

Comment puis-je faire?

Était-ce utile?

La solution

In case of a palettized image, the pixels contain a one byte value, which is an index into the palette. The palette has 256 entries.

Pixels are stored starting at address AVFrame.data[0]; the palette is stored starting at address AVFrame.data[1].

So to get the 4 bytes pixel value for the pixel at (X, Y), you can use first:

uint8_t Index= AVFrame.data[0][X + AVFrame.linesize[0] * Y];

to get the index into the palette, and then

int RGBA= ((int*)AVFrame.data[1])[Index];

to get the RGBA encoded value.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top