RGB сүрөттөрүн кантип текстке айлантуу керек

RGB сүрөттөрүн кантип текстке айлантуу керек
RGB сүрөттөрүн кантип текстке айлантуу керек

Video: RGB сүрөттөрүн кантип текстке айлантуу керек

Video: RGB сүрөттөрүн кантип текстке айлантуу керек
Video: CorelDraw программасында тексттин эффекттерин кантип түзүү керек 2024, Май
Anonim

Bmp сүрөтүнүн ар бир пиксели анын түсү жөнүндө маалыматты RGB моделинен алып жүрөт (сүрөттүн түстүү модели, ал үч компоненттен турат R - кызыл, G - жашыл, B - көк). Ар бир компоненттин мааниси 00… FF диапазонунда турган RGB түс маанисин он алтылык форматында (он алтылык) сактоо ыңгайлуу. 000000 айкалышы карага, FFFFFF - акка туура келет.

RGB сүрөттөрүн кантип текстке айлантуу керек
RGB сүрөттөрүн кантип текстке айлантуу керек

Баштоо үчүн, Drawing аталыш мейкиндигин ачалы:

System. Drawing колдонуп;

Битмап классынын жаңы нускасын түзөлү:

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.

Color [,] color = new Color [bmp. Width, bmp. Height];

for (int y = 0; y <bmp. Height; y ++)

for (int x = 0; x <bmp. Width; x ++)

{

color [x, y] = bmp. GetPixel (x, y);

}

Файлга түстүү баалуулуктарды жазуу үчүн, биз StreamWriter классын колдонобуз. Color инстанциясынын R, G, B элементтери байт тибинде болгондуктан, аларды ToString ("X2") ыкмасы менен RGB элементтеринин алтылык маанисин сактай турган сап түрүнө которобуз.

StreamWriter steamWriter = жаңы StreamWriter ("c: / 1.txt");

for (int y = 0; y <bmp. Height; y ++)

{

for (int x = 0; x <bmp. Width; x ++)

{

steamWriter. Write (color [x, y]. R. ToString ("X2"));

steamWriter. Write (түс [x, y]. G. ToString ("X2"));

steamWriter. Write (color [x, y]. B. ToString ("X2") + ");

}

steamWriter. WriteLine ();

}

steamWriter. Close ();

Эми тескери операцияны жүргүзөлү - алынган тексттик файлды сүрөткө айландырыңыз.

StreamReader жардамы менен файлдагы маалыматты окуйбуз.

StreamReader txtFile = жаңы StreamReader ("c: / 1.txt");

Биз сүрөттүн туурасын жана бийиктигин эсептейбиз. Ар бир пиксел 6 белгиден жана 1 боштукту алгандыктан, аягында боштук жок болгондуктан, туурасын эсептөө үчүн төмөнкү формуланы колдонобуз:

temp = txtFile. ReadLine ();

туурасы = (темп. Узундугу + 1) / 7;

Сүрөттүн бийиктиги - файлдагы саптардын саны:

while (! 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 - сүрөттүн координаттары, Color. FromArgb (R, G, B) түс түзүмүн түзүүчү ыкма.

for (int i = 0; i <бийиктик; i + +)

{

temp = txtFile2. ReadLine ();

string substring = temp. Split ('');

for (int j = 0; j <width; j + +)

{

R = байт. Парс (substring [j]. Substring (0, 2), System. Globalization. NumberStyles. HexNumber)

G = байт. Парс (substring [j]. Substring (2, 2), System. Globalization. NumberStyles. HexNumber)

B = байт. Парс (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);

Сунушталууда: