كيفية تحويل صور RGB إلى نص

كيفية تحويل صور RGB إلى نص
كيفية تحويل صور RGB إلى نص

فيديو: كيفية تحويل صور RGB إلى نص

فيديو: كيفية تحويل صور RGB إلى نص
فيديو: تحويل النص في الصورة الى نص قابل للتعديل باستخدام جوجل درايف 2024, شهر نوفمبر
Anonim

يحمل كل بكسل في صورة bmp معلومات حول لونها من نموذج RGB (نموذج ألوان الصورة ، والذي يتكون من ثلاثة مكونات R - أحمر ، G - أخضر ، B - أزرق). من الأنسب تخزين قيمة ألوان RGB بتنسيق سداسي عشري (سداسي عشري) ، حيث تكون قيمة كل مكون في النطاق 00… FF. التركيبة 000000 تقابل الأسود ، FFFFFF - إلى الأبيض.

كيفية تحويل صور RGB إلى نص
كيفية تحويل صور RGB إلى نص

للبدء ، دعنا نفتح مساحة اسم الرسم:

باستخدام System. Drawing ؛

لنقم بإنشاء مثيل جديد لفئة Bitmap:

صورة نقطية bmp = صورة نقطية جديدة ("c: / 1.bmp") / / c: / 1.bmp - عنوان الصورة

لتخزين قيمة لون البكسل ، يمكنك إنشاء بنية منفصلة ، تكون حقولها عبارة عن مكونات RGB ، لكنني قررت استخدام فئة اللون من مساحة الاسم Drawing. للحصول على اللون ، نستخدم طريقة GetPixel (x ، y) ، حيث x ، y هما إحداثيات بكسل الصورة. إذا كنت تريد استخدام الهيكل الخاص بك لتخزين اللون ، بدلاً من مثيل لفئة اللون ، فيمكنك استخدام طريقة bmp. GetPixel (x ، y).x للحصول على مكون RGB واحد ، حيث x هي R ، G أو B.

اللون [،] اللون = لون جديد [bmp. Width، bmp. Height]؛

لـ (int y = 0 ؛ y <bmp.eight ؛ 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.eight ؛ y ++)

{

لـ (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 أحرف وفجوة واحدة ، ولا توجد فجوة في النهاية ، فإننا نستخدم الصيغة التالية لحساب العرض:

temp = txtFile. ReadLine () ،

العرض = (temp. Length + 1) / 7 ؛

ارتفاع الصورة هو عدد الأسطر في الملف:

بينما (! txtFile. EndOfStream)

{

txtFile. ReadLine () ،

الارتفاع ++ ؛

}

الارتفاع ++ ؛

حرك مؤشر القراءة في الملف إلى البداية:

txtFile. DiscardBufferedData () ،

قم بإنشاء مثيل جديد لفئة Bitmap:

صورة نقطية bmp2 = صورة نقطية جديدة (عرض ، ارتفاع) ؛

باستخدام طريقة الانقسام ، قمنا بتقسيم عناصر المصفوفة. نعلن عن ثلاثة متغيرات من نوع البايت - R ، G ، B. باستخدام طرق التحليل و Substring ، حدد عناصر اللون بشكل منفصل.

لتعبئة البكسل في الصورة بهذا اللون ، استخدم طريقة SetPixel (j، i، Color. FromArgb (R، G، B)) ، حيث j ، i هي إحداثيات الصورة ، اللون.) هي الطريقة التي تخلق بنية اللون.

لـ (int i = 0 ؛ i <height ؛ i + +)

{

temp = txtFile2. ReadLine () ،

سلسلة substring = temp. Split ('') ؛

لـ (int j = 0 ؛ j <العرض ؛ j + +)

{

R = byte. Parse (سلسلة فرعية [j]. سلسلة فرعية (0 ، 2) ،

System. Globalization. NumberStyles. HexNumber)

G = byte. Parse (سلسلة فرعية [j]. سلسلة فرعية (2 ، 2) ،

System. Globalization. NumberStyles. HexNumber)

B = byte. Parse (سلسلة فرعية [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) ،

موصى به: