Hvordan Konvertere RGB-bilder Til Tekst

Hvordan Konvertere RGB-bilder Til Tekst
Hvordan Konvertere RGB-bilder Til Tekst

Video: Hvordan Konvertere RGB-bilder Til Tekst

Video: Hvordan Konvertere RGB-bilder Til Tekst
Video: Hvordan konvertere håndskrift til tekst 2024, Kan
Anonim

Hver piksel av et bmp-bilde bærer informasjon om fargen fra RGB-modellen (fargemodellen til bildet, som består av tre komponenter R - rød, G - grønn, B - blå). Det er mer praktisk å lagre RGB-fargeverdi i hex-format (heksadesimal), hvor verdien til hver komponent er i området 00… FF. Kombinasjonen 000000 tilsvarer svart, FFFFFF - til hvitt.

Hvordan konvertere RGB-bilder til tekst
Hvordan konvertere RGB-bilder til tekst

For å komme i gang, la oss åpne tegneområdet:

ved hjelp av System. Drawing;

La oss lage en ny forekomst av Bitmap-klassen:

Bitmap bmp = ny Bitmap ("c: / 1.bmp") / / c: / 1.bmp - bildeadresse

For å lagre pikselfargeverdien, kan du opprette en egen struktur, hvis felt er RGB-komponenter, men jeg bestemte meg for å bruke fargeklassen fra tegningsnavnområdet. For å få fargen bruker vi GetPixel (x, y) -metoden, der x, y er koordinatene til bildepikslet. Hvis du vil bruke din egen struktur til å lagre fargen, i stedet for en forekomst av Color-klassen, kan du bruke bmp. GetPixel (x, y).x-metoden for å få en enkelt RGB-komponent, hvor x er R, G, eller B.

Farge [,] farge = ny Farge [bmp. Bredde, bmp. Høyde];

for (int y = 0; y <bmp. Høyde; y ++)

for (int x = 0; x <bmp. Bredde; x ++)

{

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

}

For å skrive fargeverdier til en fil, bruker vi klassen StreamWriter. Siden R-, G-, B-elementene i Color-forekomsten er av byte-typen, konverterer vi dem ved hjelp av ToString-metoden ("X2") til en strengtype som vil lagre hexverdiene til RGB-elementene.

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

for (int y = 0; y <bmp. Høyde; y ++)

{

for (int x = 0; x <bmp. Bredde; x ++)

{

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

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

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

}

steamWriter. WriteLine ();

}

steamWriter. Close ();

La oss nå utføre den omvendte operasjonen - konverter den resulterende tekstfilen til et bilde.

Ved hjelp av StreamReader leser vi informasjon fra filen.

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

Vi beregner bredden og høyden på bildet. Siden hver piksel tar 6 tegn og 1 gap, og det ikke er noe gap på slutten, bruker vi følgende formel for å beregne bredden:

temp = txtFile. ReadLine ();

bredde = (temp. lengde + 1) / 7;

Bildehøyde er antall linjer i filen:

while (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

høyde ++;

}

høyde ++;

Flytt lesepekeren i filen til begynnelsen:

txtFile. DiscardBufferedData ();

Opprett en ny forekomst av Bitmap-klassen:

Bitmap bmp2 = ny Bitmap (bredde, høyde);

Ved hjelp av delingsmetoden deler vi elementene i matrisen. Vi erklærer tre variabler av byte-typen - R, G, B. Ved hjelp av analyserings- og understrengningsmetodene velger du fargelementene separat.

For å fylle pixelen i bildet med denne fargen, bruk metoden SetPixel (j, i, Color. FromArgb (R, G, B)), der j, i er bildekoordinatene, Color. FromArgb (R, G, B) er metoden som skaper strukturen Color.

for (int i = 0; i <høyde; i + +)

{

temp = txtFile2. ReadLine ();

streng substring = temp. Split ('');

for (int j = 0; j <bredde; 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));

}

}

Nå kan du lagre bildene. Hvis du jobber i WindowsForm, kan du bruke SaveFileDialog-klassen:

SaveFileDialog saveImage = ny SaveFileDialog ();

saveImage. Filter = bmp filer (*. bmp) | *. bmp | Alle filer (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Anbefalt: