国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

關于游戲中高效的換色方法

2019-11-18 13:33:56
字體:
來源:轉載
供稿:網友

    眾所周知,我們可以使用getRGB()取得取得圖片的RGB顏色數據,然后修改RGB顏色數據,再用Image的靜態方法createRGBImage()將修改后的RGB顏色數據生成新的png圖片。但是這個方法效率低不說,而且就目前來說,假如要做中國市場,還得使用MIDP1.0。所以今天我想談一下另外一種換色方式,通過修改調色板數據來達到換色的目的,記得以前我在論壇發過一篇關于換色和旋轉圖片的文章,但是那次僅僅限于討論,這次要說的是我已經應用在實際游戲當中的換色方法

     首先,我們取得png圖片的二進制數據,修改其中的調色板域(PLTE chunk)數據,再使用createImage(byte[] imageData,int imageOffset,int imageLength)將修改后的二進制數據生成新的png對象。(換色是基于對圖像格式的熟悉來進行的,所以你必須先了解PNG圖片的格式,這個可以參考http://www.w3.org/TR/PNG/)


下面是獲得圖片調色板數據的方法(感謝飄飄白云的代碼)


             /**
               * 修改png圖片的調色板數據生成新的png圖片
               * @param imageSrc png圖片的二進制數據字節數組
               * @return 修改后的png圖片
               */
              public Image getPLTEModifidImage(byte[] imageSrc)
              {
                            if (imageSrc == null imageSrc.length <= 1)
                                          return null;
 
                            if (crcTable == null)
                                          makeCrcTable();
 
                            // PLTE chunk數據域的類型標識
                            // see http://www.w3.org/TR/PNG/#11PLTE
                            String[] sPLTE = {"50", "4c", "54", "45"};
 
                            int i,j;
                            int pos = 0,startPos = 0;
                            byte[] data = imageSrc;
                           
                            for (i = 0; i < data.length; i++)
                            {
                        if (Integer.toHexString(data[i]).equals(sPLTE[0])
                                                  && Integer.toHexString(data[i + 1]).equals(sPLTE[1])
                                                  && Integer.toHexString(data[i + 2]).equals(sPLTE[2])
                    && Integer.toHexString(data[i + 3]).equals(sPLTE[3]))
                        {
                                      pos = i;
                                      break;
                        }
                            }
                            pos -= 4;
                            startPos = pos;



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沧州市| 五河县| 沂水县| 新营市| 榕江县| 兴化市| 北碚区| 额尔古纳市| 灵川县| 仪陇县| 密云县| 兰溪市| 当雄县| 嘉兴市| 安宁市| 济宁市| 斗六市| 蒲城县| 呼伦贝尔市| 房山区| 玛沁县| 金川县| 镇安县| 宁南县| 盐津县| 日照市| 高陵县| 招远市| 马边| 金平| 潞城市| 天峨县| 平山县| 清苑县| 莱州市| 武宁县| 镇江市| 社会| 杭锦旗| 嫩江县| 托克逊县|