Πώς να μετατρέψετε εικόνες RGB σε κείμενο

Πώς να μετατρέψετε εικόνες RGB σε κείμενο
Πώς να μετατρέψετε εικόνες RGB σε κείμενο

Βίντεο: Πώς να μετατρέψετε εικόνες RGB σε κείμενο

Βίντεο: Πώς να μετατρέψετε εικόνες RGB σε κείμενο
Βίντεο: CMYK / RGB to Pantone | Converting colours in Adobe Illustrator 2024, Νοέμβριος
Anonim

Κάθε pixel μιας εικόνας bmp μεταφέρει πληροφορίες σχετικά με το χρώμα του από το μοντέλο RGB (το έγχρωμο μοντέλο της εικόνας, το οποίο αποτελείται από τρία στοιχεία R - κόκκινο, G - πράσινο, B - μπλε). Είναι πιο βολικό να αποθηκεύετε την τιμή χρώματος RGB σε δεκαεξαδική μορφή (δεκαεξαδική), όπου η τιμή κάθε στοιχείου είναι στην περιοχή 00… FF. Ο συνδυασμός 000000 αντιστοιχεί σε μαύρο, FFFFFF - σε λευκό.

Πώς να μετατρέψετε εικόνες RGB σε κείμενο
Πώς να μετατρέψετε εικόνες RGB σε κείμενο

Για να ξεκινήσετε, ας ανοίξουμε το χώρο ονομάτων σχεδίασης:

χρησιμοποιώντας System. Drawing;

Ας δημιουργήσουμε μια νέα παρουσία της κλάσης Bitmap:

Bitmap bmp = νέο Bitmap ("c: / 1.bmp") / / c: / 1.bmp - διεύθυνση εικόνας

Για να αποθηκεύσετε την τιμή χρώματος pixel, μπορείτε να δημιουργήσετε μια ξεχωριστή δομή, της οποίας τα πεδία είναι στοιχεία RGB, αλλά αποφάσισα να χρησιμοποιήσω την κλάση χρωμάτων από το χώρο ονομάτων σχεδίασης. Για να πάρουμε το χρώμα, χρησιμοποιούμε τη μέθοδο GetPixel (x, y), όπου x, y είναι οι συντεταγμένες του pixel εικόνας. Αν θέλετε να χρησιμοποιήσετε τη δική σας δομή για να αποθηκεύσετε το χρώμα και όχι μια παρουσία της κλάσης Χρώμα, τότε μπορείτε να χρησιμοποιήσετε τη μέθοδο bmp. GetPixel (x, y).x για να αποκτήσετε ένα μόνο στοιχείο RGB, όπου x είναι R, G ή Β.

Χρώμα [,] χρώμα = νέο Χρώμα [bmp. Πλάτος, bmp. Ύψος];

για (int y = 0; y <bmp. Ύψος; y ++)

για (int x = 0; x <bmp. Πλάτος; x ++)

{

χρώμα [x, y] = bmp. GetPixel (x, y);

}

Για να γράψουμε τιμές χρώματος σε ένα αρχείο, χρησιμοποιούμε την κλάση StreamWriter. Δεδομένου ότι τα στοιχεία R, G, B του στιγμιότυπου χρώματος είναι τύπου byte, τα μετατρέπουμε χρησιμοποιώντας τη μέθοδο ToString ("X2") σε τύπο συμβολοσειράς που θα αποθηκεύει τις δεκαεξαδικές τιμές των στοιχείων RGB.

StreamWriter steamWriter = νέο StreamWriter ("c: / 1.txt");

για (int y = 0; y <bmp. Ύψος; y ++)

{

για (int x = 0; x <bmp. Πλάτος; x ++)

{

steamWriter. Write (χρώμα [x, y]. R. ToString ("X2"));

steamWriter. Write (χρώμα [x, y]. G. ToString ("X2"));

steamWriter. Write (χρώμα [x, y]. B. ToString ("X2") + ");

}

steamWriter. WriteLine ();

}

steamWriter. Close ();

Τώρα ας πραγματοποιήσουμε την αντίστροφη λειτουργία - μετατρέψτε το αρχείο κειμένου που προκύπτει σε εικόνα.

Με τη βοήθεια του StreamReader διαβάζουμε πληροφορίες από το αρχείο.

StreamReader txtFile = νέο StreamReader ("c: / 1.txt");

Υπολογίζουμε το πλάτος και το ύψος της εικόνας. Δεδομένου ότι κάθε εικονοστοιχείο έχει 6 χαρακτήρες και 1 κενό και δεν υπάρχει κενό στο τέλος, χρησιμοποιούμε τον ακόλουθο τύπο για τον υπολογισμό του πλάτους:

temp = txtFile. ReadLine ();

πλάτος = (θερμοκρασία. Μήκος + 1) / 7;

Το ύψος της εικόνας είναι ο αριθμός των γραμμών στο αρχείο:

ενώ (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

ύψος ++;

}

ύψος ++;

Μετακινήστε το δείκτη ανάγνωσης στο αρχείο στην αρχή:

txtFile. DiscardBufferedData ();

Δημιουργήστε μια νέα παρουσία της κλάσης Bitmap:

Bitmap bmp2 = νέο Bitmap (πλάτος, ύψος);

Χρησιμοποιώντας τη μέθοδο split, χωρίζουμε τα στοιχεία της μήτρας. Δηλώνουμε τρεις μεταβλητές του τύπου byte - R, G, B. Χρησιμοποιώντας τις μεθόδους Parse και Substring, επιλέξτε τα χρωματικά στοιχεία ξεχωριστά.

Για να γεμίσετε το εικονοστοιχείο στην εικόνα με αυτό το χρώμα, χρησιμοποιήστε τη μέθοδο SetPixel (j, i, Color. FromArgb (R, G, B)), όπου j, i είναι οι συντεταγμένες εικόνας, Color. FromArgb (R, G, B) είναι η μέθοδος που δημιουργεί τη δομή Χρώμα.

για (int i = 0; i <ύψος; i + +)

{

temp = txtFile2. ReadLine ();

string substring = temp. Split ( );

για (int j = 0; j <πλάτος; j + +)

{

R = byte. Parse (υπόστρωμα [j]. Substring (0, 2), System. Globalization. NumberStyles. HexNumber)

G = byte. Parse (υπόστρωμα [j]. Υπόστρωμα (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));

}

}

Τώρα μπορείτε να αποθηκεύσετε τις εικόνες. Εάν εργάζεστε στο WindowsForm μπορείτε να χρησιμοποιήσετε την κλάση SaveFileDialog:

SaveFileDialog saveImage = νέο SaveFileDialog ();

saveImage. Filter = αρχεία bmp (*. bmp) | *. bmp | Όλα τα αρχεία (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Συνιστάται: