سؤال

أنا بحاجة إلى تحويل 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top