Resposta curta

As linhas de pixels de um BMP podem começar na borda inferior ou superior. Examine a altura com sinal e o cabeçalho, use uma amostra com orientação evidente e valide os arquivos PNG e JPG sem esconder uma falha do decodificador com uma inversão manual.

Testar ferramentas

BMP → PNG

Abrir ferramenta

Reconhecer as duas direções de linhas do BMP

Os dados de um bitmap independente de dispositivo do Windows nem sempre são gravados da primeira linha visível para a última. Em um caso comum de BITMAPINFOHEADER, uma altura positiva descreve um bitmap bottom-up: a matriz de pixels começa pela linha inferior que será exibida. Uma altura negativa pode descrever um bitmap top-down, cuja matriz começa pela linha superior. O decodificador precisa interpretar o sinal e mapear a ordem armazenada para as coordenadas de exibição. Se tratar toda matriz como top-down, poderá gerar uma imagem verticalmente invertida.

Crie uma fonte cuja orientação seja impossível de confundir. Escreva TOP perto da borda superior e BOTTOM perto da inferior, coloque uma forma assimétrica apenas de um lado e use cores distintas nos quatro cantos. Registre largura, altura com sinal, profundidade de bits e compressão do cabeçalho. Depois abra o BMP original em mais de um visualizador. Se somente um programa o inverter, investigue esse decodificador. Se todos concordarem, o aplicativo criador pode ter gravado os pixels na ordem errada ou associado um sinal incompatível à matriz.

  • Verificar o sinal da altura
  • Usar um alvo assimétrico
  • Comparar decodificadores BMP

O sinal da altura pode informar a direção das linhas, e não apenas a quantidade absoluta de pixels.

Separar ordem das linhas de outros problemas de orientação

Uma inversão vertical causada pela ordem das linhas não é o mesmo que rotação de câmera nem um problema de Exif Orientation. Não diagnostique um fluxo BMP como se fosse JPEG. Se o texto continuar legível da esquerda para a direita, mas topo e base trocarem de lugar, investigue primeiro a ordem das linhas. Uma rotação de 90 graus, um espelhamento horizontal ou uma transformação combinada aponta mais para o programa de captura, uma conversão anterior ou uma operação aplicada apenas na exibição.

APIs de captura de tela e aplicativos antigos podem copiar a memória de um DIB para BMP combinando o sinal de altura errado com a matriz de linhas. Renomear a extensão ou virar manualmente a imagem final corrige a aparência de um exemplar, mas mantém o defeito no processo. Anote o aplicativo de origem, cada operação intermediária e o conversor final; compare o arquivo em cada etapa. Se conseguir produzir uma versão correta e outra defeituosa do mesmo alvo, confronte cabeçalhos, deslocamento dos pixels e primeiras linhas de dados. Guarde nomes novos e hashes para não comparar uma prévia em cache.

  • Distinguir inversão de rotação
  • Rastrear cada etapa
  • Comparar cabeçalhos bons e ruins

Conferir preenchimento das linhas e deslocamento dos pixels

As scanlines do BMP podem incluir bytes de preenchimento para terminar em um limite de alinhamento. Se o decodificador avançar apenas pelo número de bytes visíveis, em vez do tamanho completo e preenchido da linha, o resultado tende a mostrar deriva diagonal, faixas coloridas ou linhas cortadas, não uma inversão limpa. Verifique o deslocamento até os dados de pixels, a profundidade, a largura e o cálculo de bytes por linha. Larguras que não se alinham naturalmente ao limite de armazenamento expõem esse erro melhor que dimensões convenientes.

BMPs com paleta ou compressão trazem condições adicionais. O sucesso com uma amostra não comprimida de 24 bits não comprova suporte a todas as variantes. Se os arquivos reais usam paletas de 1, 4 ou 8 bits, pixels de 16 ou 32 bits, canais semelhantes a alfa ou compressão, teste cada classe realmente recebida. Não adivinhe um novo offset nem altere bytes no lugar. Preserve a fonte, decodifique-a com uma implementação compatível e gere uma saída padrão. Se a falha mudar ao acrescentar um único pixel à largura, priorize a fórmula de stride e alinhamento.

  • Calcular o stride preenchido
  • Testar larguras desalinhadas
  • Cobrir profundidades e paletas reais

Deriva diagonal e linhas coloridas costumam indicar erro de preenchimento ou offset, não apenas ordem invertida.

Comparar PNG e JPG conforme o uso final

Converter BMP em PNG cria uma referência sem perdas adequada para verificar orientação, bordas nítidas e cores exatas. JPG acrescenta compressão com perdas e não oferece canal alfa, por isso é menos apropriado para diagnosticar texto pequeno ou pixels das extremidades. Valide primeiro o PNG. Crie JPG somente quando o destino exigir e trate qualidade JPEG, subamostragem de cor e composição sobre um fundo como decisões separadas da ordem das linhas.

Exiba o BMP, o PNG e o JPG nas mesmas dimensões e compare os quatro cantos, a primeira linha, a última e as marcações de orientação. Não confirme apenas que a figura parece em pé; procure uma linha ausente, mudança de cor causada pelo preenchimento ou alteração de transparência. Se o conversor corrigir automaticamente uma fonte incoerente, documente esse comportamento. Outra ferramenta pode interpretar o mesmo BMP de modo diferente, ainda que a primeira saída pareça correta. Verifique também em escala de 100%, pois miniaturas escondem defeitos de um pixel.

  • Usar PNG como referência
  • Comparar primeira e última linha
  • Registrar correções automáticas

Aprovar tipos representativos de ponta a ponta

Monte um conjunto com arquivos top-down e bottom-up, várias larguras, imagens com paleta e as variantes de 24 ou 32 bits usadas na produção. Passe cada uma pela ferramenta real de BMP para PNG ou BMP para JPG. Abra os resultados no aplicativo de destino e em um visualizador independente. Confirme topo e base, dimensões, cores, tratamento de alfa e integridade das linhas externas. Use arquivos com nomes novos e registre checksums, evitando que cache, sincronização ou CDN apresente uma versão anterior.

Registre os valores originais do cabeçalho, o aplicativo criador, a versão do conversor, as opções de saída e o ambiente de teste. Não repare um derivado com falha virando-o e sobrescrevendo-o; volte à fonte e decodifique corretamente. Como verificação prática final, envie ao serviço de entrega tanto o alvo marcado quanto uma imagem real do trabalho, baixe as versões servidas e compare suas bordas. Só inicie a conversão em lote depois que cada classe necessária passar e um segundo visualizador reproduzir o mesmo resultado.

  • Testar as duas direções
  • Evitar prévias em cache
  • Inspecionar o arquivo baixado

O alvo de orientação e um BMP real de produção devem passar antes da conversão de uma pasta inteira.

Pontos principais

  • Em estruturas DIB comuns, uma altura positiva pode indicar linhas de baixo para cima e uma altura negativa, linhas de cima para baixo.
  • Um decodificador que ignora o sinal pode inverter verticalmente a imagem ou produzir resultados diferentes entre aplicativos.
  • Uma amostra assimétrica e marcada, junto com os valores do cabeçalho, separa falhas de ordem das linhas de rotações e problemas de captura.
  • Depois da conversão, confira orientação, dimensões, cores, preenchimento e linhas das bordas no sistema que realmente receberá o arquivo.

Perguntas frequentes

Por que um BMP pode armazenar primeiro a linha inferior?

Layouts DIB tradicionais podem usar uma matriz bottom-up quando a altura é positiva, e o decodificador reconstrói a ordem visual de cima para baixo.

Uma altura negativa no BMP sempre indica corrupção?

Não. Em formas de cabeçalho compatíveis, ela pode indicar intencionalmente um bitmap top-down.

Posso simplesmente virar a imagem convertida em um editor?

Isso pode corrigir um arquivo visível, mas deixa a inconsistência da fonte ou do decodificador sem solução e o erro pode reaparecer.

Deriva diagonal também é problema de ordem das linhas?

Com mais frequência ela indica stride preenchido ou offset incorreto, que devem ser conferidos junto com largura e profundidade.

Qual é a verificação final da conversão?

Converta um alvo marcado e um BMP real e compare orientação, linhas externas, dimensões e cores nos arquivos efetivamente baixados do serviço.

Fontes e referências

  1. Microsoft Learn — Device-Independent Bitmaps
  2. Microsoft Learn — BITMAPINFOHEADER Structure
  3. Microsoft Learn — BMP Format Overview