[英]Absolute Value Subtraction of Two byte arrays in Java
我正在嘗試對包含 2 個圖像的字節的兩個字節數組進行絕對值減法。 我知道整個字節減法情況有很多復雜性,因為字節的“-”運算符不存在。
有沒有辦法將兩個字節數組相減並將其存儲在另一個字節數組中?
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.lang.Math;
public class Subtraction {
public static void main(String[] args) throws IOException {
//Read Image to a byte array
BufferedImage bImage = ImageIO.read(new File("ground.bmp"));
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageIO.write(bImage, "bmp", bos );
byte [] data = bos.toByteArray();
System.out.println("ground: " + data);
BufferedImage bImage2 = ImageIO.read(new File("back.bmp"));
ByteArrayOutputStream bos2 = new ByteArrayOutputStream();
ImageIO.write(bImage2, "bmp", bos2 );
byte [] data2 = bos2.toByteArray();
System.out.println("Back: " + data2);
byte [] data3 = (byte) (Math.abs(data2 - data)); // really wished this worked
System.out.println("Subtracted Bytes: " + data3);
ByteArrayInputStream j = new ByteArrayInputStream(data3);
BufferedImage bImage3;
bImage3 = ImageIO.read(j)
ImageIO.write(bImage3, "bmp", new File("Subtracted.bmp"));
System.out.println("image created");
}
}
這是我得到的錯誤:
Type mismatch: cannot convert from byte to byte[]
The operator - is undefined for the argument type(s) byte[], byte[]
我需要做的是根據字節減去兩個圖像並將其結果作為第三個圖像。
我怎樣才能用字節做到這一點?
您希望發表評論的那一行會起作用,一種選擇是按元素進行工作。
byte [] data3 = new byte[data.length];
for(int i = 0; i<data.length; i++){
data3[i] = (byte)Math.abs(data2[i] - data[i]);
}
System.out.println("Subtracted Bytes: " + Arrays.toString(data3));
這將創建一個相同長度的新字節數組,然后通過執行減法分配每個元素。
還有一件事,如果您嘗試對圖像進行操作,則您正在操作的字節數組是位圖圖像的序列化版本。 它有標題,執行這個減法可能會毀掉它。 您可能希望通過緩沖圖像進行操作。
BufferedImage bImage3 = new BufferedImage(bImage.getWidth(), bImage.getHeight(), bImage.getType());
for(int i = 0; i<bImage.getWidth(); i++){
for(int j = 0; j<bImage.getHeight(); j++){
bImage3.setRGB(i, j, Math.abs(bImage2.getRGB(i,j) - bImage.getRGB(i,j)));
}
}
這可以通過使用圖像操作或直接處理柵格來改進。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.