سؤال

إذن إليك التفاصيل (أنا أستخدم C # BTW):

أتلقى صورة 32BPP (JPEG مضغوط) من خادم. في مرحلة ما، أود استخدام خاصية لوحة نقطية لألوان البكسل المشبعة (سطوع> 240) أحمر. للقيام بذلك، أحتاج إلى الحصول على الصورة إلى تنسيق مفهرس.

لقد حاولت تحويل الصورة إلى GIF، لكنني أحصل على فقدان الجودة. لقد حاولت إنشاء صورة نقطية جديدة بتنسيق فهرس بواسطة هذه الأساليب:

// causes a "Parameter not valid" error
Bitmap indexed = new Bitmap(orig.Width, orig.Height, PixelFormat.Indexed)

// no error, but the resulting image is black due to information loss I assume
Bitmap indexed = new Bitmap(orig.Width, orig.Height, PixelFormat.Format8bppIndexed)

أنا في حيرة الآن. يتم تغيير البيانات الموجودة في هذه الصورة باستمرار من قبل المستخدم، لذلك لا أريد تعيين البكسل يدويا التي تحتوي على سطوع> 240 إذا استطعت تجنبه. إذا استطعت ضبط اللوحة مرة واحدة عند إنشاء الصورة، يتم عملي. إذا كنت ذاهبا في هذه الطريقة الخاطئة لتبدأ من فضلك اسمحوا لي أن أعرف.

تحرير: شكرا يا شباب، إليك المزيد من التفاصيل حول ما أحاول إنجازه.

نحن نبحث عن شريحة الأنسجة عند ارتفاع الدقة (تطبيق أمراض الأمراض). أنا أكتب الواجهة إلى الماسح الضوئي الفعلي. نحن نستخدم كاميرا فحص خط. لاختبار معدل خط الكاميرا، يقوم المستخدم بمسح جزء صغير جدا وينظر إلى الصورة.

يتم عرض الصورة بجانب شريط المسار. عندما يتحرك المستخدم شريط المسار (معدل الأسطر الضبط)، أقوم بتغيير الكثافة الإجمالية للصورة في محاولة لنموذج ما يبدو عليه في معدل السطر الجديد. أقوم بذلك باستخدام Ogimeatributes وكائن ColorMatrix حاليا.

عندما يقوم المستخدم بضبط شريط المسار، أقوم بضبط المصفوفة. هذا لا يعطيني لكل معلومات بكسل، ولكن الأداء لطيف جدا. أنا استطاع استخدم Lockbits وبعض الكود غير الآمن هنا، لكنني أفضل عدم إعادة كتابة ذلك إن أمكن. عندما يتم إنشاء الصورة الجديدة، أود الحصول على جميع البكسلات ذات قيمة سطوع> 240 باللون الأحمر الملون. كنت أفكر في أن تحديد لوحة من أجل وصمة نقطية مقدمة ستكون طريقة نظيفة للقيام بذلك.

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

المحلول 3

شكرا للمساعدة الجميع. يبدو أن هذا يمكن حله باستخدام فئة ImageeAttributes وحدد إعداد جدول REMAP اللون.

ColorMap[] maps = new ColorMap[someNum]
//  add mappings
imageAttrs.SetRemapTable(maps);

شكرا للمساعدة مرة أخرى، على الأقل تعلمت شيئا.

نصائح أخرى

الانتقال من 32BPP إلى 8BPP مفهرسة سيؤدي دائما إلى فقدان الجودة، ما لم تكن الصورة الأصلية أقل من 256 لونا.

يمكنك إنشاء صورة أخرى هي تراكب مع حمراء بكسل المصابة، ثم عرض كل من هؤلاء؟

نظرا لأنك تسير في السطوع> 240، فيمكنك تحويل التراكب إلى Grayscale أولا، ثم فهرستها للحصول على وحدات البكسل المبكر.

لا تحدد ما تفعله به بمجرد وضع علامة على المخالفين، لذلك لا أعرف ما إذا كان ذلك سيعمل.

يبدو وكأنه شيء يمكنك القيام به بسهولة مع شادر بكسل. حتى نماذج التظليل المبكرة للغاية سوف تدعم شيئا سهلا مثل هذا.

ومع ذلك، فإن السؤال:

هل يمكنك تضمين دعم Shader في طلبك دون الكثير من المتسارعين؟

هل تعرف برمجة شادر؟

تعديل:

ربما لا يكون لديك سياق ثلاثي الأبعاد حيث يمكنك القيام بأشياء مثل هذا = /

كنت في الغالب بث أفكاري فقط.

يجب أن يكون التلاعب في صورة بكسل بقلم بكسل ممكنا في الوقت الفعلي مع وحدة المعالجة المركزية واحدة أليس كذلك؟

إذا لم يكن الأمر كذلك، فابحث في برمجة GPGPU وفتح CL.

تحرير مرة أخرى:

إذا أعطيت المزيد من التفاصيل حول ما يفعله التطبيق فعليا، فقد نساعد أكثر قليلا؟ على سبيل المثال، إذا كنت تقوم بإجراء تطبيق ويب، فلن يكون نصائحي منطقية.

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