כיצד להמיר תמונות RGB לטקסט

כיצד להמיר תמונות RGB לטקסט
כיצד להמיר תמונות RGB לטקסט

וִידֵאוֹ: כיצד להמיר תמונות RGB לטקסט

וִידֵאוֹ: כיצד להמיר תמונות RGB לטקסט
וִידֵאוֹ: שילוב יצירתי של טקסט על גבי תמונה שקופה במצגת 2024, נוֹבֶמבֶּר
Anonim

כל פיקסל של תמונת bmp נושא מידע על צבעו מדגם RGB (מודל הצבע של התמונה, המורכב משלושה רכיבים R - אדום, G - ירוק, B - כחול). נוח יותר לאחסן ערך צבע RGB בפורמט hex (הקסדצימלי), כאשר הערך של כל רכיב הוא בטווח 00 … FF. השילוב 000000 תואם לשחור, FFFFFF - לבן.

כיצד להמיר תמונות RGB לטקסט
כיצד להמיר תמונות RGB לטקסט

כדי להתחיל, בואו נפתח את מרחב השמות ציור:

באמצעות System. Drawing;

בואו ניצור מופע חדש של מחלקת Bitmap:

מפת סיביות bmp = מפת סיביות חדשה ("c: / 1.bmp") / / c: / 1.bmp - כתובת תמונה

כדי לאחסן את ערך צבע הפיקסלים, תוכלו ליצור מבנה נפרד, שהשדות שלו הם רכיבי RGB, אך החלטתי להשתמש במחלקת הצבעים מתוך מרחב השמות ציור. כדי לקבל את הצבע, אנו משתמשים בשיטת GetPixel (x, y), כאשר x, y הם הקואורדינטות של פיקסל התמונה. אם ברצונך להשתמש במבנה משלך לאחסון הצבע במקום מופע של מחלקת הצבעים, תוכל להשתמש בשיטת bmp. GetPixel (x, y).x כדי להשיג רכיב RGB יחיד, כאשר x הוא R, G, או B.

צבע [,] צבע = צבע חדש [bmp. Width, bmp. Height];

עבור (int y = 0; y <bmp. Height; y ++)

עבור (int x = 0; x <bmp. Width; x ++)

{

צבע [x, y] = bmp. GetPixel (x, y);

}

כדי לכתוב ערכי צבע לקובץ, אנו משתמשים במחלקת StreamWriter. מכיוון שאלמנטים R, G, B של המופע Color הם מסוג בתים, אנו ממירים אותם בשיטת ToString ("X2") לסוג מחרוזת שיאחסן את ערכי ה- hex של רכיבי RGB.

StreamWriter steamWriter = StreamWriter חדש ("c: / 1.txt");

עבור (int y = 0; y <bmp. Height; y ++)

{

עבור (int x = 0; x <bmp. Width; 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 תווים ופער אחד, ואין פער בסוף, אנו משתמשים בנוסחה הבאה כדי לחשב את הרוחב:

temp = txtFile. ReadLine ();

רוחב = (טמפ 'אורך + 1) / 7;

גובה התמונה הוא מספר השורות בקובץ:

while (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

גובה ++;

}

גובה ++;

העבר את מצביע הקריאה בקובץ להתחלה:

txtFile. DiscardBufferedData ();

צור מופע חדש של מחלקת Bitmap:

מפת סיביות bmp2 = מפת סיביות חדשה (רוחב, גובה);

בשיטת הפיצול אנו מפצלים את אלמנטים של המטריצה. אנו מצהירים על שלושה משתנים מסוג הבייט - R, G, B. בעזרת שיטות הניתוח והמחתר בחר את אלמנטים הצבע בנפרד.

כדי למלא את הפיקסל בתמונה בצבע זה, השתמש בשיטת SetPixel (j, i, Color. FromArgb (R, G, B)), כאשר j, i הם קואורדינטות התמונה, Color. FromArgb (R, G, B) היא השיטה היוצרת את המבנה Color.

עבור (int i = 0; i <גובה; i + +)

{

temp = txtFile2. ReadLine ();

מחרוזת substring = temp. Split ('');

עבור (int j = 0; j <width; j + +)

{

R = בייט. Parse (מזרק [j]. מיתר (0, 2), System. Globalization. NumberStyles. HexNumber)

G = בתים. Parse (substring [j]. Substring (2, 2), System. Globalization. NumberStyles. HexNumber)

B = בייט. 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);

מוּמלָץ: