ج# - كيفية تحويل صورة إلى 8 بت لون الصورة ؟
-
21-09-2019 - |
سؤال
أنا بحاجة إلى تحويل PNG صورة تحميل من ملف إلى 8 بت لكل بكسل صفيف بايت المستخدمة من قبل جهاز آخر (البرمجة جزءا لا يتجزأ).
أنا نسخ أكثر من بكسل بكسل في صورة جديدة تم إنشاؤها مع لون 16 بت - Format16bppRgb565
, ولكن أنا بحاجة Format8bpp
, التي ليست موجودة في .NET Framework.(أنا لا يمكن استخدام Format8bppIndexed
منذ الجهاز الآخر لا يمكن التعامل مع فهرسة الصور النقطية)
Bitmap img = new Bitmap(imgPath);
Bitmap img8 = new Bitmap(imgW, imgH, PixelFormat.Format16bppRgb565);
for (int I = 0; I <= img.Width - 1; I++) {
for (int J = 0; J <= img.Height - 1; J++) {
img8.SetPixel(I, J, img.GetPixel(I, J));
}
}
كيف يمكنني تحويل صورة إلى 8 بت لكل بكسل صفيف بايت?
- هل يمكنني استخدام 8 بت فهرسة شكل استخراج بايت?-
Format8bppIndexed
- يمكنني حساب بكسل الألوان عن طريق الحد من 32 بت لون R,G,B القيم إلى 8 بت ؟
- هل هناك C# مكتبة هل هذا بالفعل ؟
- "أسهل طريقة هو خلق جديد 8 bit bitmap و رسم 24 بت صورة على ذلك." - كيف ؟
المحلول
على الرغم من أنني لست متأكدًا من كيفية القيام بذلك باستخدام Vanilla C# يمكنك استخدام مشروع FreeImage المكتبات لتحويل تنسيقات الصور:
FreeImage هو مشروع مكتبة مفتوح المصدر للمطورين الذين يرغبون في دعم تنسيقات صور الرسومات الشهيرة مثل PNG و BMP و JPEG و TIFF وغيرهم حسب الحاجة من قبل تطبيقات الوسائط المتعددة اليوم. FreeImage سهل الاستخدام وسريع ومتعدد مؤشرات الترابط الآمن ، متوافق مع جميع الإصدارات 32 بت من Windows ، والموضوع عبر كل من Linux و Mac OS X).
إنه مكتوب في C ++ ولكن لديه مغلفات جيدة .NET يمكنك استخدامها.
نصائح أخرى
لقد فعلت هذا بالفعل في التعرف على نمط المشروع.البحث عن بعض معالجة الصور و التعرف على الأنماط الكتب يمكنك أن تجد هذه الحلول.
أ) إذا كنت تريد تحويله إلى اللون الرمادي يمكنك أن تجد في اثنين من الحلول.
#1 حيث بلغ متوسطها القنوات RGB.- يمكنك أن تأخذ 8 بت قيم أفيري قناة واحدة وحساب بكسل = ( R+G+B )/3
#2 تأخذ فقط العنصر الأخضر.فمن الأفضل النظر إليها.
ب) إذا كنت تريد تحويله إلى 8bit تمثيل الألوان تحتاج إلى استخدام جدول الألوان.يمكنك أن ترى الحل هنا http://www.codeproject.com/KB/graphics/Image_Bitdepth_Conversion.aspx