RGB轉8色16色256色
阿新 • • 發佈:2019-01-02
RGB色的圖片有255*255*255=16581375種顏色,如果再加上透明度ARGB就要再乘以255,這麼多的顏色在圖形處理中有時不需要使用那麼多的顏色,只需要轉化成8色、16色或者256色就可以了,而透明度則作特殊處理,比如在閥值80以下的定為透明,80以上的定為不透明,透明的則用0號索引色,不透明的就用大於0的索引色,這樣就在一定程度上轉化了圖片的顏色同時又保留了一定的透明度,在有些場景中是可以用的。下面是轉化的程式碼.
#region To8Color /// <summary> /// 8色化 /// </summary> /// <returns></returns> public int To8Color() { //8色化處理,取RGB的高1位相與。 var r1 = (R >> 5) & 0x4; var g1 = (G >> 6) & 0x2; var b1 = (B >> 7); var c = (r1 | g1 | b1) + 1;//0表示透明,1-8表示顏色索引。 return c; } #endregion #region To8Color /// <summary> /// 16色化 /// </summary> /// <returns></returns> public int To16Color() { //16色系統調色盤: //0 = RGB(0, 0, 0) = 0x00000000; //1 = RGB(128, 0, 0) = 0x00000080; //2 = RGB(0, 128, 0) = 0x00008000; //3 = RGB(128, 128, 0) = 0x00008080; //4 = RGB(0, 0, 128) = 0x00800000; //5 = RGB(128, 0, 128) = 0x00800080; //6 = RGB(0, 128, 128) = 0x00808000; //7 = RGB(128, 128, 128) = 0x00808080; //8 = RGB(192, 192, 192) = 0x00c0c0c0; //9 = RGB(255, 0, 0) = 0x000000ff; //10 = RGB(0, 255, 0) = 0x0000ff00; //11 = RGB(255, 255, 0) = 0x0000ffff; //12 = RGB(0, 0, 255) = 0x00ff0000; //13 = RGB(255, 0, 255) = 0x00ff00ff; //14 = RGB(0, 255, 255) = 0x00ffff00; //15 = RGB(255, 255, 255) = 0x00ffffff; //16色化處理,取R、G的高1位和B的高2位相與 var r1 = (R >> 4) & 0x8; var g1 = (G >> 5) & 0x4; var b1 = (B >> 6) & 0x3; var c = (r1 | g1 | b1) + 1;//0表示透明,1-16表示顏色索引。 return c; } #endregion #region To256Color /// <summary> /// 256色 /// </summary> /// <returns></returns> public int To256Color() { var c = (int)(0.299 * R + 0.587 * G + 0.114 * B);//0表示透明,1-256表示顏色索引。 c = c & 0xFF; return c; } #endregion
8色、16色和256色都需要設定對應的調色盤,程式碼中給出了16色的調色盤。具體的調色盤可以依據RGB色中某些顏色的佔比而設定。
轉載請註明出處。