使用Java中的FileInputStream读取映像

时间:2016-04-12 05:13:48

标签: java

我正在尝试使用fileInputStream来读取图像并写出来生成另一个图像。我想读取像素,然后更改像素以获得左右翻转图像。但是,现在我只读取图像并直接写出来,我弄错了。使用超编辑后,这是我从前4个字节得到的:
原图:42 4D 7A 95
新图像:42 4D 7A 3F

似乎MSB为1的每个字节都已更改为 3F 。我知道Java中的每个数据类型都是有符号的,而且我已经尝试过对每个字节进行0xff。

public static void imageOut() {
   try {
        FileInputStream in = new FileInputStream(new File(getPath()));
        int[] temp = new int[fSize];
        int i = 0;

        while (in.available() > 0) {
            temp[i] = in.read();
            i++;
        }

        OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(getOutputPath()));
        for (int j = 0; j < temp.length; j++) {
            out.write(((byte)temp[j]));
        }

        out.flush();
        out.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:1)

是的,因为你正在写字节

out.write(((byte)temp[j]))

你需要写一个4字节的int。不要将int截断为字节

out.write(temp[j])

最终这不是编写图像的方法 - 这将重现文件,因此它可以用于此应用程序(只需复制文件)。但是如果你想改变像素并重写一个新图像,你需要使用imageio(或其他一些机制)来编写图像。

-

OutputStreamWriter写入字符;为什么不使用等价物:

FileOutputStream:您可以在读取时写入字节。