سؤال

أنا أعمل على تطبيق يطبع مجلد من ملفات الصور ، بما في ذلك JPEG و TIFF. عادة ما تكون صور TIFF بالأبيض والأسود (1BPP).

بعد تحميل الصورة ، أريد تحديد ما إذا كانت الصورة اللون أو b & w أو رمادي حتى أتمكن من إرسال الصورة إلى الطابعة الصحيحة (طابعة ملونة أو طابعة بالأبيض والأسود).

أنا أستخدم Bitmap البناء image = new Bitmap(filename); لتحميل الصورة.

تعديل: الجواب للتحقق من عمق البكسل أمر رائع لـ B&W. أي أفكار حول التحقق مما إذا كانت الصورة رمادية دون تكرار كل بكسل؟

هل كانت مفيدة؟

المحلول

الطريقة الصحيحة للتحقق من ذلك هي:

بالنسبة لملفات JPEG ، يجب عليك التحقق من الخصائص المناسبة باستخدام PropertyItems مجموعة من صورة نقطية. قد يحتوي هذا على ما هو مناسب EXIF العلامات للمساعدة في تحديد عمق البت. الخطوة التالية هي تحليل رأس JPEG وابحث عن علامة "بداية الإطار" ثم عدد المكونات في الصورة.

تتمثل الطريقة النهائية في تحميل JPEG في كائن نقطية ومقارنة عدد وحدات البكسل مع ForumLa (العرض * الارتفاع * bytes_per_pixel). لذا ، إذا قمت بتحميل صورة نقطية وعدد بايت من البيانات الأولية الفعلية (ارتفاع العرض *) ، فأنت تعلم أنه رهان آمن على أن الصورة تحتوي على بايت واحد لكل بكسل ، وبالتالي فهو رمادي.

آخر شيء تريد التحقق منه هو pixelformat من صورة نقطية نفسها.

ل شجار تنسيق الملف يجب عليك فعل الشيء نفسه باستخدام مجموعة PropertyItems والتحقق من العلامة المناسبة المذكورة في المواصفات. إذا فشلت هذه الفشل ، فقم بإجراء مقارنة بايت الصورة وأخيراً استخدم خاصية Pixelformat كملجأ أخير.

نصائح أخرى

فقط تحقق من هذه الخاصية

image.PixelFormat

سوف يتطابق مع واحدة من القيم في System.drawing.imaging.pixelformat

على الرغم من أنك ترغب في إرسال أكثر من مجرد أبيض وأبيض إلى طابعة B&W ، يجب عليك أيضًا إرسال أي مقاييس رمادية هناك أيضًا.

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