Sådan Konverteres RGB-billeder Til Tekst

Sådan Konverteres RGB-billeder Til Tekst
Sådan Konverteres RGB-billeder Til Tekst

Video: Sådan Konverteres RGB-billeder Til Tekst

Video: Sådan Konverteres RGB-billeder Til Tekst
Video: Как перевести из RGB в CMYK без потери цвета 2024, Kan
Anonim

Hver pixel i et bmp-billede bærer information om sin farve fra RGB-modellen (billedets farvemodel, der består af tre komponenter R - rød, G - grøn, B - blå). Det er mere praktisk at gemme RGB-farveværdi i hex-format (hexadecimal), hvor værdien af hver komponent er i området 00… FF. Kombinationen 000000 svarer til sort, FFFFFF - til hvid.

Sådan konverteres RGB-billeder til tekst
Sådan konverteres RGB-billeder til tekst

For at komme i gang, lad os åbne Tegne-navneområdet:

ved hjælp af System. Drawing;

Lad os oprette en ny forekomst af Bitmap-klassen:

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

For at gemme pixelfarveværdien kan du oprette en separat struktur, hvis felter er RGB-komponenter, men jeg besluttede at bruge Color-klassen fra tegningens navneområde. For at få farven bruger vi GetPixel (x, y) -metoden, hvor x, y er koordinaterne for billedpixelen. Hvis du vil bruge din egen struktur til at gemme farven snarere end en forekomst af Color-klassen, kan du bruge metoden bmp. GetPixel (x, y).x til at få en enkelt RGB-komponent, hvor x er R, G eller B.

Farve [,] farve = ny Farve [bmp. Bredde, bmp. Højde];

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

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

{

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

}

For at skrive farveværdier til en fil bruger vi StreamWriter-klassen. Da R-, G-, B-elementerne i farveforekomsten er af byte-typen, konverterer vi dem ved hjælp af ToString ("X2") -metoden til en strengtype, der gemmer hex-værdierne for RGB-elementerne.

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

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

{

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

{

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

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

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

}

steamWriter. WriteLine ();

}

steamWriter. Close ();

Lad os nu udføre den omvendte operation - konverter den resulterende tekstfil til et billede.

Ved hjælp af StreamReader læser vi information fra filen.

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

Vi beregner bredden og højden af billedet. Da hver pixel tager 6 tegn og 1 hul, og der ikke er noget hul i slutningen, bruger vi følgende formel til at beregne bredden:

temp = txtFile. ReadLine ();

bredde = (temp. længde + 1) / 7;

Billedhøjde er antallet af linjer i filen:

while (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

højde ++;

}

højde ++;

Flyt læsemarkøren i filen til begyndelsen:

txtFile. DiscardBufferedData ();

Opret en ny forekomst af Bitmap-klassen:

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

Ved hjælp af splitmetoden deler vi elementerne i matrixen. Vi erklærer tre variabler af bytetypen - R, G, B. Brug farve- og understrengningsmetoder til at vælge farveelementerne separat.

For at udfylde pixel i billedet med denne farve skal du bruge metoden SetPixel (j, i, Color. FromArgb (R, G, B)), hvor j, i er billedkoordinaterne, Color. FromArgb (R, G, B) er metoden, der skaber strukturen Farve.

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

{

temp = txtFile2. ReadLine ();

streng substring = temp. Split ('');

for (int j = 0; j <bredde; j + +)

{

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

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

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

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

}

}

Nu kan du gemme billederne. Hvis du arbejder i WindowsForm, kan du bruge klassen SaveFileDialog:

SaveFileDialog saveImage = ny SaveFileDialog ();

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

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Anbefalede: