كيفية الحصول على الألوان "الحقيقية" عند تصدير رسم GDI إلى BMP

StackOverflow https://stackoverflow.com/questions/2759568

سؤال

أقوم بتطوير معالج ويب ASP.NET الذي يرجع الصور التي تصنع في الذاكرة System.Windows.Forms.Control ثم يصدر عنصر التحكم المقدم باعتباره صورة نقطية مضغوطة إلى PNG ، باستخدام الطريقة DrawToBitmap(). تعمل الفصول بشكل كامل الآن ، باستثناء مشكلة في مهمة اللون. على سبيل المثال ، هذا مقياس تم إنشاؤه بواسطة معالج الويب.

The gauge

الألوان المخصصة للأجزاء الداخلية من المقياس حمراء (#FF0000)، الأصفر (#FFFF00) والأخضر (#00FF00) لكنني فقط أحصل على نسخة dully من كل لون (#CB100F للأحمر ، #CCB70D للأصفر و #04D50D للأخضر).

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

  • مع خلفية سوداء

With black background

  • مع خلفية شفافة

With a transparent background

  • بخلفية بيضاء

With a white background

  • بدون مجموعة خلفية

Without a background set

  • مع تنسيق البكسل في format32bppargb

With pixelformat Format32bppArgb

لقد جربت العديد من أعماق ألوان الصورة النقطية ، وتنسيقات الإخراج ، ومستوى الضغط ، وما إلى ذلك ، لكن لا يبدو أن أيًا منها يعمل. أيه أفكار؟

هذا مقتطف من الكود المصدر:

Bitmap bmp = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Image bgimage = (Image) HttpContext.GetGlobalResourceObject("GraphicResources", "GaugeBackgroundImage");
Canvas control_canvas = new Canvas(); //inherits from Control
....
//the routine that makes the gauge
....
control_canvas.DrawToBitmap(bmp, new Rectangle(0, 0, w, h));
هل كانت مفيدة؟

المحلول 4

كان Canvas فصلًا يوفره طرف ثالث. لقد وجدنا خطأ في الحزمة الخاصة بهم ، وأصدروا إصدارًا جديدًا ، وتم حل المشكلة أخيرًا. شكرا على أي حال على وقتك!

نصائح أخرى

عند رسم الألوان ، تحقق للتأكد من ضبط قناة ألفا بشكل صحيح أيضًا. إذا كان لديك بعض ألفا ، فسوف تمتزج مع تلك الخلفية المظلمة ويعطيك لونًا أغمق.

هل جربت هذا مع PNGs فقط؟ لقد وصلت إلى هذه المشكلة مع PNGS (أو JPEGs؟) في متصفح منذ فترة طويلة ، لكن GIF IIRC ألغت المشكلة:

لاحظ أنني لا أقول أن GIFs ستحل مشكلتك في الخطأ الطويل ، لكن قد تخبرك بما إذا كانت PNG كتابة/قراءة هي المشكلة. جربه ، جرب BMP ، جرب شيئًا. لا تصدق PNG. يمكنك محاولة إلقاء قيم RGB على ملف السجل (أو إلى القرص كما الخام والاستيراد إلى Photoshop و) معرفة ما هي الأرقام قبل كتابة صورة نقطية. (يستخدم lockbits; ؛ هناك برامج تعليمية للرمز حول الحصول على بايت داخل وخارج نقطات).

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

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