Cómo Convertir Imágenes RGB A Texto

Cómo Convertir Imágenes RGB A Texto
Cómo Convertir Imágenes RGB A Texto

Video: Cómo Convertir Imágenes RGB A Texto

Video: Cómo Convertir Imágenes RGB A Texto
Video: Como convertir una imagen a un texto editable en Word 2024, Noviembre
Anonim

Cada píxel de una imagen bmp lleva información sobre su color del modelo RGB (el modelo de color de la imagen, que consta de tres componentes R - rojo, G - verde, B - azul). Es más conveniente almacenar el valor de color RGB en formato hexadecimal (hexadecimal), donde el valor de cada componente está en el rango 00… FF. La combinación 000000 corresponde a negro, FFFFFF - a blanco.

Cómo convertir imágenes RGB a texto
Cómo convertir imágenes RGB a texto

Para comenzar, abramos el espacio de nombres de Dibujo:

usando System. Drawing;

Creemos una nueva instancia de la clase Bitmap:

Mapa de bits bmp = nuevo mapa de bits ("c: / 1.bmp") / / c: / 1.bmp - dirección de imagen

Para almacenar el valor del color del píxel, puede crear una estructura separada, cuyos campos sean componentes RGB, pero decidí usar la clase Color del espacio de nombres Dibujo. Para obtener el color, usamos el método GetPixel (x, y), donde x, y son las coordenadas del píxel de la imagen. Si desea usar su propia estructura para almacenar el color, en lugar de una instancia de la clase Color, puede usar el método bmp. GetPixel (x, y).x para obtener un solo componente RGB, donde x es R, G o B.

Color [,] color = nuevo Color [bmp. Width, bmp. Height];

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

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

{

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

}

Para escribir valores de color en un archivo, usamos la clase StreamWriter. Dado que los elementos R, G, B de la instancia de Color son del tipo byte, los convertimos usando el método ToString ("X2") a un tipo de cadena que almacenará los valores hexadecimales de los elementos RGB.

StreamWriter steamWriter = nuevo 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 ();

Ahora llevemos a cabo la operación inversa: convierta el archivo de texto resultante en una imagen.

Con la ayuda de StreamReader leemos información del archivo.

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

Calculamos el ancho y alto de la imagen. Dado que cada píxel tiene 6 caracteres y 1 espacio, y no hay espacio al final, usamos la siguiente fórmula para calcular el ancho:

temp = txtFile. ReadLine ();

ancho = (temp. Longitud + 1) / 7;

La altura de la imagen es el número de líneas del archivo:

while (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

altura ++;

}

altura ++;

Mueva el puntero de lectura en el archivo al principio:

txtFile. DiscardBufferedData ();

Cree una nueva instancia de la clase Bitmap:

Mapa de bits bmp2 = nuevo mapa de bits (ancho, alto);

Usando el método de división, dividimos los elementos de la matriz. Declaramos tres variables del tipo de byte: R, G, B. Usando los métodos Parse y Substring, seleccione los elementos de color por separado.

Para rellenar el píxel de la imagen con este color, utilice el método SetPixel (j, i, Color. FromArgb (R, G, B)), donde j, i son las coordenadas de la imagen, Color. FromArgb (R, G, B) es el método que crea la estructura Color.

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

{

temp = txtFile2. ReadLine ();

cadena subcadena = temp. Split ('');

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

{

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

G = byte. Parse (subcadena [j]. Subcadena (2, 2),

System. Globalization. NumberStyles. HexNumber)

B = byte. Parse (subcadena [j]. Subcadena (4, 2), System. Globalization. NumberStyles. HexNumber)

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

}

}

Ahora puedes guardar las imágenes. Si está trabajando en WindowsForm, puede usar la clase SaveFileDialog:

SaveFileDialog saveImage = new SaveFileDialog ();

saveImage. Filter = archivos bmp (*. bmp) | *. bmp | Todos los archivos (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Recomendado: