როგორ გადაიყვანოთ RGB სურათები ტექსტში

როგორ გადაიყვანოთ RGB სურათები ტექსტში
როგორ გადაიყვანოთ RGB სურათები ტექსტში
Anonim

Bmp სურათის თითოეული პიქსელი ატარებს ინფორმაციას მისი ფერის შესახებ RGB მოდელიდან (სურათის ფერადი მოდელი, რომელიც შედგება სამი კომპონენტისგან R - წითელი, G - მწვანე, B - ლურჯი). უფრო მოსახერხებელია RGB ფერის მნიშვნელობის შენახვა თექვსმეტ ფორმატში (თექვსმეტობითი), სადაც თითოეული კომპონენტის მნიშვნელობა არის 00… FF დიაპაზონში. კომბინაცია 000000 შეესაბამება შავს, FFFFFF - თეთრს.

როგორ გადაიყვანოთ RGB სურათები ტექსტში
როგორ გადაიყვანოთ RGB სურათები ტექსტში

დასაწყებად, მოდით გავხსნათ Drawing namespace:

გამოყენებით System. Drawing;

მოდით შევქმნათ Bitmap კლასის ახალი ინსტანცია:

Bitmap bmp = new Bitmap ("c: / 1.bmp") / / c: / 1.bmp - სურათის მისამართი

პიქსელის ფერის მნიშვნელობის შესანახად შეგიძლიათ შექმნათ ცალკე სტრუქტურა, რომლის ველები RGB კომპონენტებია, მაგრამ მე გადავწყვიტე გამომეყენებინა ფერების კლასი Drawing namespace- დან. ფერის მისაღებად ვიყენებთ GetPixel (x, y) მეთოდს, სადაც x, y გამოსახულების პიქსელის კოორდინატებია. თუ გსურთ გამოიყენოთ თქვენი სტრუქტურა ფერის შესანახად, და არა ფერის კლასის ინსტანციისთვის, შეგიძლიათ გამოიყენოთ bmp. GetPixel (x, y).x მეთოდი ერთი RGB კომპონენტის მისაღებად, სადაც x არის R, G, ან B.

ფერი [,] ფერი = ახალი ფერი [bmp. Width, bmp. Hight];

for (int y = 0; y <bmp. სიმაღლე; y ++)

ამისთვის (int x = 0; x <bmp. სიგანე; x ++)

{

ფერი [x, y] = bmp. GetPixel (x, y);

}

ფაილში ფერის მნიშვნელობების დასაწერად ვიყენებთ StreamWriter კლასს. ვინაიდან Color ინსტანციის R, G, B ელემენტები ბაიტის ტიპისაა, ჩვენ მათ ToString ("X2") მეთოდის გამოყენებით ვაქცევთ სტრიქონის ტიპად, რომელიც ინახავს RGB ელემენტების თექვსმეტ მნიშვნელობებს.

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

for (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 = new StreamReader ("c: / 1.txt");

ჩვენ გამოვთვლით სურათის სიგანეს და სიმაღლეს. მას შემდეგ, რაც თითოეულ პიქსელს აქვს 6 სიმბოლო და 1 უფსკრული, და ბოლოს არ არის ხარვეზი, სიგანის გამოსათვლელად გამოვიყენებთ შემდეგ ფორმულას:

temp = txtFile. ReadLine ();

სიგანე = (ტემპი სიგრძე + 1) / 7;

სურათის სიმაღლე არის ფაილში ხაზების რაოდენობა:

ხოლო (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

სიმაღლე ++;

}

სიმაღლე ++;

წაიკითხეთ წაკითხვის მაჩვენებელი ფაილში დასაწყისში:

txtFile. DiscardBufferedData ();

შექმენით Bitmap კლასის ახალი ინსტანცია:

Bitmap bmp2 = ახალი Bitmap (სიგანე, სიმაღლე);

გაყოფილი მეთოდის გამოყენებით, ჩვენ დავყოფთ მატრიცის ელემენტებს. ვაცხადებთ ბაიტის ტიპის სამ ცვლადს - R, G, B. Parse და Substring მეთოდების გამოყენებით, ცალკე შეარჩიეთ ფერის ელემენტები.

სურათის პიქსელის შევსების მიზნით გამოიყენეთ SetPixel (j, i, Color. FromArgb (R, G, B)) მეთოდი, სადაც j, i არის სურათის კოორდინატები, ფერი. FromArgb (R, G, B) არის მეთოდი, რომელიც ქმნის სტრუქტურას Color.

for (int i = 0; i <სიმაღლე; i + +)

{

temp = txtFile2. ReadLine ();

string substring = temp. Split ('');

for (int j = 0; j <სიგანე; j + +)

{

R = ბაიტი. Parse (ქვესტრიქონი [j]. ქვესტრიქონი (0, 2), System. Globalization. NumberStyles. HexNumber)

G = ბაიტი. Parse (ქვესტრიქონი [j]. ქვესტრიქონი (2, 2), System. Globalization. NumberStyles. HexNumber)

B = ბაიტი. Parse (ქვესტრიქონი [j]. ქვესტრიქონი (4, 2),

System. Globalization. NumberStyles. HexNumber)

bmp2. SetPixel (j, i, ფერი. FromArgb (R, G, B));

}

}

ახლა სურათების შენახვა შეგიძლიათ. თუ WindowsForm– ში მუშაობთ, შეგიძლიათ გამოიყენოთ SaveFileDialog კლასი:

SaveFileDialog saveImage = ახალი SaveFileDialog ();

saveImage. Filter = bmp ფაილი (*. bmp) | *. bmp | ყველა ფაილი (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. შენახვა (saveImage. FileName);

გირჩევთ: