Kuantiti Warna Berkesan untuk GIF Beranimasi
Di Java, algoritma kuantisasi yang anda nyatakan (ditemui di http://www.java2s.com /Code/Java/2D-Graphics-GUI/Anefficientcolorquantizationalgorithm.htm) nampaknya kurang ketepatan untuk imej dengan lebih daripada 256 warna. Untuk meningkatkan pengkuantitian warna, pertimbangkan alternatif berikut:
Algoritma Alternatif:
Pendekatan untuk Kuantiti Pantas dan Cekap:
Kod Contoh dalam C :
// Histogram and index arrays DWORD his[32768]; DWORD idx[32768]; // Recolor mapping table BYTE recolor[32][32][32]; // Extract 15-bit RGB from 32-bit RGB cc=((cc>>3)&0x1F)|((cc>>6)&0x3E0)|((cc>>9)&0x7C00); // Histogram counting his[cc]++; // Reorder and sort histogram for (x=0,y=0;y<32768;y++) { his[x]=his[y]; idx[x]=idx[y]; if (his[x]) x++; } hists=x; for (i=1;i;) for (i=0,x=0,y=1;y<hists;x++,y++) if (his[x]<his[y]) { i=his[x]; his[x]=his[y]; his[y]=i; i=idx[x]; idx[x]=idx[y]; idx[y]=i; i=1; } // Create color palette for (i0=0,x=0;x<hists;x++) { cc=idx[x]; b= cc &31; g=(cc>> 5)&31; r=(cc>>10)&31; c0.db[0]=b; c0.db[1]=g; c0.db[2]=r; c0.dd=(c0.dd<<3)&0x00F8F8F8; // Find closest color in palette int dc=-1; DWORD ii=0; for (a=0,i=0;i<i0;i++) { aa=int(BYTE(c1.db[0]))-int(BYTE(c0.db[0])); if (aa<=0) aa=-aa; a =aa; aa=int(BYTE(c1.db[1]))-int(BYTE(c0.db[1])); if (aa<=0) aa=-aa; a+=aa; aa=int(BYTE(c1.db[2]))-int(BYTE(c0.db[2])); if (aa<=0) aa=-aa; a+=aa; if ((dc<0)||(dc>a)) { dc=a; ii=i; } } recolor[r][g][b]=ii; } // Recolor image using mapping table pyx [y][x]=lcolor[recolor[r][g][b]];
Pendekatan ini menyediakan kuantisasi warna yang lebih pantas dan tepat. Algoritma dan parameter khusus untuk digunakan mungkin berbeza-beza bergantung pada imej input dan hasil yang diingini.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Kuantiti Warna Berkesan untuk GIF Animasi di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!