[英]Android change raw PNG data
我的項目中有一個PNG文件,我想在運行時更改一些值。
ByteArrayOutputStream output = new ByteArrayOutputStream();
try {
InputStream input = getIntro().getAssets().open("image.png");
byte[] tmp = new byte[1024];
int ret = 0;
while ((ret = input.read(tmp, 0, 1024)) >= 0) {
output.write(tmp, 0, ret);
}
} catch (IOException ex) {
System.out.print(ex);
}
byte[] imgArray = output.toByteArray();
imgArray[1000] = (byte) Color.red(Const.SOMEVALUE);
return BitmapFactory.decodeByteArray(imgArray, 0, imgArray.length);
無論我在imgArray[1000] = (byte) Color.red(MyApplication.COLOR_BOARD_BG)
行中做什么,我都會得到一個空圖像。 如果我不使用該行並手動修改字節數組就可以,但是我更改的任何內容(在標頭或正文中)都不會不同=空白圖像。
實際上,我嘗試修改調色板信息,但在此作為示例,我更改了第1000個元素,該元素是圖像數據中的某個值。
PNG文件格式以壓縮形式存儲圖像數據。 僅在某處更改一個字節可能會使內部校驗和無效,從而導致圖像無效,因此您不能這樣做。 除此之外, 每個PNG塊都受32位CRC校驗和保護 ,因此對文件任何部分的任何修改都至少需要將校驗和更新為您修改的塊
如果要修改圖像的像素,則可以使用可用的庫(例如Android上的BitmapFactory和Bitmap)更輕松地首先對PNG數據進行解碼。
Bitmap png = BitmapFactory.decodeFile(selectedImagePath);
png.setPixel(34,43,0xFFFF0000);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.