//Artikel ini telah diterjemahkan oleh www.blue1000.com , alamat aslinya adalah http://codebetter.com/blogs/brendan.tompkins/archive/2004/01/26/6103.aspx
//Hargai hasil kerja orang lain, harap sebutkan sumbernya saat mencetak ulang.
GDI+ sering digunakan saat menulis program. GDI+ dapat menyimpan gambar gelap 32 bpp sebagai file gif, dan prosesnya relatif sederhana. Dan sebelum menyimpan gambar gif ini menggunakan metode CreateThumnailImage, Anda juga bisa mengatur ukurannya.
Kode yang umum digunakan:
Kode di atas dapat menyelesaikan gambar dan penyimpanan file gif, tetapi Anda akan segera menemukan masalah: thumbnail yang dihasilkan kualitas gambar file .gif jauh di bawah ekspektasi kami.
Gambar efek:
Gambar berbintik berkualitas rendah yang ditunjukkan di atas juga memerlukan pemrosesan "kuantisasi warna" (palettisasi). Hal ini terjadi karena GDI+ menggunakan 256 warna secara default, tanpa mempertimbangkan warna sebenarnya dari gambar itu sendiri.
Setelah itu kami mencoba membuat "palet" kami sendiri, tetapi hasilnya lebih buruk lagi :). Algoritme "kuantisasi warna" yang baik harus mempertimbangkan pengisian ruang antara dua partikel piksel dengan warna transisi yang mirip dengan warna dua piksel, sehingga memberikan ruang warna yang lebih terlihat.
Ini adalah algoritma "Octree". Algoritma “Octree” memungkinkan kita memasukkan algoritma kita sendiri untuk mengkuantisasi gambar kita.
Berikut dua artikel dari Microsoft yang mungkin bermanfaat bagi kami: KB 319061 dan Mengoptimalkan Kuantisasi Warna untuk Gambar ASP.NET (oleh Morgan Skinner, Microsoft). Morgan Skinner menyediakan kode algoritma "Octree" yang bagus, yang dapat Anda unduh untuk referensi.
Menggunakan OctreeQuantizer itu mudah:
Sistem.Gambar.Bitmap b = Sistem.Gambar.Bitmap baru(“c:\original_image.gif“);
System.Drawing.Image thumbnail = b.GetThumbnailImage(100,75,null,new IntPtr());
Pengukur OctreeQuantizer = OctreeQuantizer baru (255, 8);
menggunakan (Bitmap terkuantisasi = quantizer.Quantize (thmbnail) )
{
terkuantisasi.Simpan(“c:\thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);
}
OctreeQuantizer greyquantizer = GrayscaleQuantizer baru ( );
menggunakan ( Bitmap terkuantisasi = greyquantizer.Quantize ( thumbnail ) )
{
terkuantisasi.Simpan(“c:\thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);
}
Gambar efeknya adalah sebagai berikut (lebih indahkah?):