Hoe RGB-afbeeldingen Naar Tekst Te Converteren

Hoe RGB-afbeeldingen Naar Tekst Te Converteren
Hoe RGB-afbeeldingen Naar Tekst Te Converteren

Video: Hoe RGB-afbeeldingen Naar Tekst Te Converteren

Video: Hoe RGB-afbeeldingen Naar Tekst Te Converteren
Video: CMYK afbeelding naar RGB converteren 2024, Mei
Anonim

Elke pixel van een bmp-afbeelding bevat informatie over de kleur van het RGB-model (het kleurmodel van de afbeelding, dat bestaat uit drie componenten R - rood, G - groen, B - blauw). Het is handiger om de RGB-kleurwaarde in hexadecimaal formaat (hexadecimaal) op te slaan, waarbij de waarde van elk onderdeel in het bereik 00… FF ligt. De combinatie 000000 komt overeen met zwart, FFFFFF - met wit.

Hoe RGB-afbeeldingen naar tekst te converteren
Hoe RGB-afbeeldingen naar tekst te converteren

Laten we om te beginnen de naamruimte Tekening openen:

met behulp van System. Drawing;

Laten we een nieuwe instantie van de klasse Bitmap maken:

Bitmap bmp = nieuwe Bitmap ("c: / 1.bmp") / / c: / 1.bmp - afbeeldingsadres

Om de pixelkleurwaarde op te slaan, kunt u een aparte structuur maken, waarvan de velden RGB-componenten zijn, maar ik heb besloten om de klasse Kleur uit de naamruimte Tekening te gebruiken. Om de kleur te krijgen, gebruiken we de GetPixel-methode (x, y), waarbij x, y de coördinaten van de afbeeldingspixel zijn. Als u uw eigen structuur wilt gebruiken om de kleur op te slaan, in plaats van een instantie van de klasse Color, dan kunt u de bmp. GetPixel (x, y).x-methode gebruiken om een enkele RGB-component te krijgen, waarbij x R is, G, of B.

Kleur [,] kleur = nieuw Kleur [bmp. Breedte, bmp. Hoogte];

voor (int y = 0; y <bmp. Hoogte; y ++)

voor (int x = 0; x <bmp. Breedte; x ++)

{

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

}

Om kleurwaarden naar een bestand te schrijven, gebruiken we de klasse StreamWriter. Aangezien de R, G, B-elementen van de Color-instantie van het bytetype zijn, converteren we ze met behulp van de ToString ("X2")-methode naar een stringtype dat de hexadecimale waarden van de RGB-elementen opslaat.

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

voor (int y = 0; y <bmp. Hoogte; y ++)

{

voor (int x = 0; x <bmp. Breedte; x ++)

{

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

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

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

}

steamWriter. WriteLine ();

}

steamWriter. Sluiten ();

Laten we nu de omgekeerde bewerking uitvoeren - converteer het resulterende tekstbestand naar een afbeelding.

Met behulp van StreamReader lezen we informatie uit het bestand.

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

We berekenen de breedte en hoogte van de afbeelding. Aangezien elke pixel 6 karakters en 1 opening in beslag neemt, en er aan het einde geen opening is, gebruiken we de volgende formule om de breedte te berekenen:

temp = txtFile. ReadLine ();

breedte = (temp. Lengte + 1) / 7;

De afbeeldingshoogte is het aantal regels in het bestand:

terwijl (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

hoogte ++;

}

hoogte ++;

Verplaats de leeswijzer in het bestand naar het begin:

txtFile. DiscardBufferedData ();

Maak een nieuwe instantie van de klasse Bitmap:

Bitmap bmp2 = nieuwe Bitmap (breedte, hoogte);

Met behulp van de split-methode splitsen we de elementen van de matrix. We declareren drie variabelen van het bytetype - R, G, B. Gebruik de methoden Parse en Substring om de kleurelementen afzonderlijk te selecteren.

Gebruik de methode SetPixel (j, i, Color. FromArgb (R, G, B)) om de pixel in de afbeelding met deze kleur te vullen, waarbij j, i de afbeeldingscoördinaten zijn, Color. FromArgb (R, G, B) is de methode die de structuur Kleur creëert.

voor (int i = 0; i <hoogte; i + +)

{

temp = txtFile2. ReadLine ();

string substring = temp. Split ('');

voor (int j = 0; j <breedte; j + +)

{

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

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

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

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

}

}

Nu kunt u de afbeeldingen opslaan. Als u in WindowsForm werkt, kunt u de klasse SaveFileDialog gebruiken:

SaveFileDialog saveImage = nieuw SaveFileDialog ();

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

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Aanbevolen: