Como Converter Imagens RGB Em Texto

Como Converter Imagens RGB Em Texto
Como Converter Imagens RGB Em Texto

Vídeo: Como Converter Imagens RGB Em Texto

Vídeo: Como Converter Imagens RGB Em Texto
Vídeo: OCR - Como converter imagem em texto editável 2024, Novembro
Anonim

Cada pixel de uma imagem bmp carrega informações sobre sua cor do modelo RGB (o modelo de cor da imagem, que consiste em três componentes R - vermelho, G - verde, B - azul). É mais conveniente armazenar o valor da cor RGB no formato hexadecimal (hexadecimal), onde o valor de cada componente está na faixa de 00… FF. A combinação 000000 corresponde ao preto, FFFFFF - ao branco.

Como converter imagens RGB em texto
Como converter imagens RGB em texto

Para começar, vamos abrir o namespace Drawing:

using System. Drawing;

Vamos criar uma nova instância da classe Bitmap:

Bitmap bmp = new Bitmap ("c: / 1.bmp") / / c: / 1.bmp - endereço da imagem

Para armazenar o valor da cor do pixel, você pode criar uma estrutura separada, cujos campos são componentes RGB, mas decidi usar a classe Color do namespace Drawing. Para obter a cor, usamos o método GetPixel (x, y), onde x, y são as coordenadas do pixel da imagem. Se você quiser usar sua própria estrutura para armazenar a cor, em vez de uma instância da classe Color, você pode usar o método bmp. GetPixel (x, y).x para obter um único componente RGB, onde x é R, G ou B.

Cor [,] color = nova cor [bmp. Width, bmp. Height];

para (int y = 0; y <bmp. Height; y ++)

para (int x = 0; x <bmp. Width; x ++)

{

cor [x, y] = bmp. GetPixel (x, y);

}

Para gravar valores de cor em um arquivo, usamos a classe StreamWriter. Como os elementos R, G, B da instância Color são do tipo byte, nós os convertemos usando o método ToString ("X2") em um tipo de string que armazenará os valores hexadecimais dos elementos RGB.

StreamWriter steamWriter = new StreamWriter ("c: / 1.txt");

para (int y = 0; y <bmp. Height; y ++)

{

para (int x = 0; x <bmp. Width; x ++)

{

steamWriter. Write (color [x, y]. R. ToString ("X2"));

steamWriter. Write (color [x, y]. G. ToString ("X2"));

steamWriter. Write (color [x, y]. B. ToString ("X2") + ");

}

steamWriter. WriteLine ();

}

steamWriter. Close ();

Agora vamos realizar a operação inversa - converter o arquivo de texto resultante em uma imagem.

Com a ajuda do StreamReader, lemos as informações do arquivo.

StreamReader txtFile = new StreamReader ("c: / 1.txt");

Calculamos a largura e a altura da imagem. Como cada pixel possui 6 caracteres e 1 lacuna, e não há lacuna no final, usamos a seguinte fórmula para calcular a largura:

temp = txtFile. ReadLine ();

largura = (temp. Comprimento + 1) / 7;

A altura da imagem é o número de linhas no arquivo:

while (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

altura ++;

}

altura ++;

Mova o ponteiro de leitura no arquivo para o início:

txtFile. DiscardBufferedData ();

Crie uma nova instância da classe Bitmap:

Bitmap bmp2 = novo Bitmap (largura, altura);

Usando o método de divisão, dividimos os elementos da matriz. Declaramos três variáveis do tipo byte - R, G, B. Usando os métodos Parse e Substring, selecione os elementos de cor separadamente.

Para preencher o pixel da imagem com esta cor, use o método SetPixel (j, i, Color. FromArgb (R, G, B)), onde j, i são as coordenadas da imagem, Color. FromArgb (R, G, B) é o método que cria a estrutura Color.

para (int i = 0; i <altura; i + +)

{

temp = txtFile2. ReadLine ();

string substring = temp. Split ('');

para (int j = 0; j <largura; j + +)

{

R = byte. Parse (substring [j]. Substring (0, 2), System. Globalization. NumberStyles. HexNumber)

G = byte. Parse (substring [j]. Substring (2, 2), System. Globalization. NumberStyles. HexNumber)

B = byte. Parse (substring [j]. Substring (4, 2),

System. Globalization. NumberStyles. HexNumber)

bmp2. SetPixel (j, i, Color. FromArgb (R, G, B));

}

}

Agora você pode salvar as imagens. Se você estiver trabalhando no WindowsForm, poderá usar a classe SaveFileDialog:

SaveFileDialog saveImage = new SaveFileDialog ();

saveImage. Filter = arquivos bmp (*. bmp) | *. bmp | Todos os arquivos (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Recomendado: