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

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

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

ვიდეო: როგორ გადაიყვანოთ RGB სურათები ტექსტში
ვიდეო: როგორ გადაიზარდოს ნებისმიერი Photoshop ჯაგ... 2024, ნოემბერი
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);

გირჩევთ: