Ինչպես վերափոխել RGB պատկերները տեքստի

Ինչպես վերափոխել RGB պատկերները տեքստի
Ինչպես վերափոխել RGB պատկերները տեքստի

Video: Ինչպես վերափոխել RGB պատկերները տեքստի

Video: Ինչպես վերափոխել RGB պատկերները տեքստի
Video: 03.09. АНАЛИЗ ИНДЕКСОВ. RGBI. SP500. Доллар.Нефть. Золото. Серебро. Новости. Трейдинг.Инвестиции 2024, Նոյեմբեր
Anonim

Bmp պատկերի յուրաքանչյուր պիքսել իր գույնի մասին տեղեկատվություն է հաղորդում RGB մոդելից (պատկերի գունային մոդելը, որը բաղկացած է երեք բաղադրիչներից R - կարմիր, G - կանաչ, B - կապույտ): Ավելի հարմար է RGB գույնի արժեքը պահպանել վեցանկյուն ձևաչափով (տասնվեցական), որտեղ յուրաքանչյուր բաղադրիչի արժեքը գտնվում է 00… FF տիրույթում: 000000 համադրությունը համապատասխանում է սևին, FFFFFF` սպիտակին:

Ինչպես վերափոխել RGB պատկերները տեքստի
Ինչպես վերափոխել RGB պատկերները տեքստի

Սկսելու համար եկեք բացենք Գծագրական անունների տարածքը.

օգտագործելով System. Drawing;

Եկեք ստեղծենք Bitmap դասի նոր օրինակ.

Bitmap bmp = նոր Bitmap ("c: / 1.bmp") / / c: / 1.bmp - պատկերի հասցե

Պիքսել գույնի արժեքը պահելու համար կարող եք ստեղծել առանձին կառուցվածք, որի դաշտերը RGB բաղադրիչ են, բայց ես որոշեցի օգտագործել Գծային անվանման տարածքից Color դասը: Գույնը ստանալու համար մենք օգտագործում ենք GetPixel (x, y) մեթոդը, որտեղ x, y պատկերի պիքսել կոորդինատներն են: Եթե ուզում եք գույնը պահելու համար օգտագործել ձեր սեփական կառուցվածքը, այլ ոչ թե Color դասի օրինակ, ապա կարող եք օգտագործել 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 տարրերը բայթ տիպի են, մենք դրանք փոխակերպում ենք ToString («X2») մեթոդով ՝ լարային տիպի, որը կպահի 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. Մոտիկ ();

Հիմա եկեք կատարենք հակառակ գործողությունը. Արդյունքում տեքստային ֆայլը վերածենք պատկերի:

StreamReader- ի օգնությամբ մենք կարդում ենք տեղեկատվությունը ֆայլից:

StreamReader txtFile = new StreamReader ("գ: / 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) գույնը կառուցվածքը ստեղծող մեթոդ է:

համար (int i = 0; i <բարձրություն; i + +)

{

temp = txtFile2. ReadLine ();

string substring = temp. Split ('');

համար (int j = 0; j <լայնություն; j + +)

{

R = բայթ: Parse (substring [j]. Substring (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. Պահել (saveImage. FileName);

Խորհուրդ ենք տալիս: