Partilhar via


Top-Down vs. Bottom-Up DIBs

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEnginee Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Se você é novo em programação gráfica, você pode esperar que um bitmap seria organizado na memória para que a linha superior da imagem apareceu no início do buffer, seguido pela próxima linha e assim por diante. No entanto, não é necessariamente esse o caso. No Windows, os bitmaps independentes do dispositivo (DIBs) podem ser colocados na memória em duas orientações diferentes, de baixo para cima e de cima para baixo.

Em um DIB de baixo para cima, o buffer de imagem começa com a linha inferior de pixels, seguida pela próxima linha para cima e assim por diante. A linha superior da imagem é a última linha no buffer. Portanto, o primeiro byte na memória é o pixel inferior esquerdo da imagem. No GDI, todos os DIBs são bottom-up. O diagrama a seguir mostra o layout físico de um DIB de baixo para cima.

dib de baixo para cima

Em um DIB de cima para baixo, a ordem das linhas é invertida. A linha superior da imagem é a primeira linha na memória, seguida pela próxima linha para baixo. A linha inferior da imagem é a última linha no buffer. Com um DIB de cima para baixo, o primeiro byte na memória é o pixel superior esquerdo da imagem. O DirectDraw usa DIBs de cima para baixo. O diagrama a seguir mostra o layout físico de um DIB de cima para baixo:

dib de cima para baixo

Para DIBs RGB, a orientação da imagem é indicada pelo biHeight membro da estruturaBITMAPINFOHEADER. Se biHeight for positivo, a imagem é de baixo para cima. Se biHeight for negativo, a imagem é de cima para baixo.

DIBs em formatos YUV são sempre de cima para baixo, e o sinal do membro biHeight é ignorado. Os descodificadores devem oferecer formatos YUV com biHeight depositivo, mas também devem aceitar formatos YUV com biHeight de negativos e ignorar o sinal.

Além disso, qualquer tipo de DIB que utilize um FOURCC no membro do biCompression , deve expressar o seu biHeight como um número positivo, independentemente da sua orientação, uma vez que o próprio FOURCC identifica um esquema de compressão cuja orientação da imagem deve ser entendida por qualquer filtro compatível.

Trabalhando com quadros de vídeo