نحوه تبدیل تصاویر 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)؛

توصیه شده: