نحوه تبدیل تصاویر RGB به متن

نحوه تبدیل تصاویر RGB به متن
نحوه تبدیل تصاویر RGB به متن

تصویری: نحوه تبدیل تصاویر RGB به متن

تصویری: نحوه تبدیل تصاویر RGB به متن
تصویری: 56- آموزش Photoshop پیشرفته - تبدیل عکس RGB به CMYK - سعید طوفانی 2024, نوامبر
Anonim

هر پیکسل از یک تصویر bmp اطلاعات مربوط به رنگ آن را از مدل RGB حمل می کند (مدل رنگی تصویر که از سه جز R R - قرمز ، G - سبز ، B - آبی تشکیل شده است). راحت تر است که مقدار رنگ RGB را در قالب هگز (هگزادسیمال) ذخیره کنید ، جایی که مقدار هر جز component در محدوده 00… FF باشد. ترکیب 000000 مربوط به سیاه و سفید ، FFFFFF - به سفید است.

نحوه تبدیل تصاویر RGB به متن
نحوه تبدیل تصاویر RGB به متن

برای شروع ، بیایید فضای نامی Drawing را باز کنیم:

با استفاده از System. Drawing ؛

بیایید یک نمونه جدید از کلاس Bitmap ایجاد کنیم:

Bitmap bmp = Bitmap جدید ("c: / 1.bmp") / / c: / 1.bmp - آدرس تصویر

برای ذخیره مقدار رنگ پیکسل ، می توانید یک ساختار جداگانه ایجاد کنید که قسمت های آن اجزای RGB هستند ، اما من تصمیم گرفتم از کلاس Color از فضای نام Drawing استفاده کنم. برای به دست آوردن رنگ ، از روش GetPixel (x، y) استفاده می کنیم ، جایی که x ، y مختصات پیکسل تصویر هستند. اگر می خواهید به جای نمونه ای از کلاس Color ، از ساختار خود برای ذخیره رنگ استفاده کنید ، می توانید از روش bmp. GetPixel (x، y).x برای بدست آوردن یک م Rلفه RGB واحد استفاده کنید ، که x R است ، G یا B

رنگ [،] رنگ = رنگ جدید [bmp. Width ، bmp. Hight]؛

for (int y = 0؛ y <bmp. Hight؛ 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")؛

for (int y = 0؛ y <bmp. Hight؛ 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 = new 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 ، من مختصات تصویر است ، Color. FromArgb (R ، G ، B)) روشی است که ساختار Color را ایجاد می کند.

for (int i = 0؛ i <height؛ i + +)

{

temp = txtFile2. ReadLine ()؛

رشته substring = temp. Split ('')؛

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

{

R = بایت. تجزیه (زیر رشته [j]. زیر رشته (0 ، 2) ،

System. Globalization. NumberStyles. HexNumber)

G = بایت. تجزیه (زیر رشته [j]. زیر رشته (2 ، 2) ،

System. Globalization. NumberStyles. HexNumber)

B = بایت. تجزیه (زیر رشته [j]. زیر رشته (4 ، 2) ،

System. Globalization. NumberStyles. HexNumber)

bmp2. SetPixel (j ، i ، Color. FromArgb (R ، G ، B)) ؛

}

}

اکنون می توانید تصاویر را ذخیره کنید. اگر در WindowsForm کار می کنید می توانید از کلاس SaveFileDialog استفاده کنید:

SaveFileDialog saveImage = new SaveFileDialog ()؛

saveImage. Filter = پرونده های bmp (*. bmp) | *. bmp | همه پرونده ها (*. *)

| *. * ;

saveImage. ShowDialog ()؛

bmp2. Save (saveImage. FileName)؛

توصیه شده: