// تمت ترجمة هذه المقالة بواسطة www.blue1000.com ، العنوان الأصلي هو http://codebetter.com/blogs/brendan.tompkins/archive/2004/01/26/6103.aspx
// احترم ثمرة عمل الآخرين، ويرجى الإشارة إلى المصدر عند إعادة الطباعة.
غالبًا ما يتم استخدام GDI+ عند كتابة البرامج، حيث يمكنه حفظ صورة داكنة بحجم 32 بت في الثانية كملف GIF، وتكون العملية بسيطة نسبيًا. وقبل حفظ صورة GIF هذه باستخدام طريقة CreateThumnailImage، يمكنك أيضًا ضبط حجمها.
الرموز شائعة الاستخدام:
يمكن للكود أعلاه إكمال رسم ملفات gif وحفظها، ولكنك ستجد قريبًا مشكلة: الصورة المصغرة التي تم إنشاؤها جودة صورة ملف .gif أقل بكثير من توقعاتنا.
صورة التأثير:
تتطلب الصورة المحببة منخفضة الجودة الموضحة أعلاه أيضًا معالجة "تكميم الألوان" (palettization). يحدث هذا لأن GDI+ يستخدم 256 لونًا بشكل افتراضي، دون مراعاة اللون الفعلي للصورة نفسها.
بعد ذلك، حاولنا إنشاء "لوحة الألوان" الخاصة بنا، لكن النتائج كانت أسوأ :). يجب أن تفكر خوارزمية "تكميم الألوان" الجيدة في ملء المسافة بين جزيئتي بكسل بلون انتقالي مشابه للون البكسلتين، مما يوفر مساحة ألوان أكثر وضوحًا.
هذه هي خوارزمية "أوكتري". تسمح لنا خوارزمية "Octree" بتوصيل الخوارزمية الخاصة بنا لتحديد كمية صورنا.
إليك مقالتين من Microsoft قد تكونا مفيدتين لنا: KB 319061 وتحسين قياس الألوان لصور ASP.NET (بواسطة Morgan Skinner، Microsoft). يوفر Morgan Skinner كود خوارزمية جيد "Octree"، والذي يمكنك تنزيله كمرجع.
يعد استخدام OctreeQuantizer أمرًا سهلاً:
System.Drawing.Bitmap b = new System.Drawing.Bitmap("c:\original_image.gif");
System.Drawing.Image thmbnail = b.GetThumbnailImage(100,75,null,new IntPtr());
OctreeQuantizer quantizer = OctreeQuantizer الجديد ( 255 , 8 ) ;
باستخدام (الصورة النقطية الكمية = الكمية.Quantize (thmbnail))
{
quantized.Save(“c:\thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);
}
OctreeQuantizer greyquantizer = new GrayscaleQuantizer ( );
باستخدام ( الصورة النقطية الكمية = Grayquantizer.Quantize ( thmbnail ) )
{
quantized.Save(“c:\thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);
}
صورة التأثير هي كما يلي (هل هي أجمل بكثير؟):