gpt4 book ai didi

java - 在java中以像素为单位读取和写入图像

转载 作者:行者123 更新时间:2023-11-29 03:35:24 24 4
gpt4 key购买 nike

我正在尝试使用 BufferedImage 读取和写入灰度图像。但是书写图像中的像素与其来源略有不同。我不擅长这个图像处理的东西。请任何人帮助我找出我在代码中犯的错误。

这是我的代码

File InImage=new File("source.jpg");
File OutImage=new File("out.jpg");

/* code for reading the image*/
BufferedImage image=ImageIO.read(InImage);
WritableRaster raster=image.getRaster();

/* writing the same raster to a new image */
BufferedImage newImg=new BufferedImage(raster.getWidth(), raster.getHeight(),BufferedImage.TYPE_BYTE_GRAY);
newImg.setData(raster);
ImageIO.write(newImg, "jpg", OutImage);

最佳答案

import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;


public class ToGray {

public static void main(String[] args) throws IOException {
File file = new File("f:/lion.jpg");
BufferedImage img = ImageIO.read(file);
int width = img.getWidth();
int height = img.getHeight();
int[][] pixel = new int[width][height];
Raster raster = img.getData();
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
pixel[i][j] = raster.getSample(i, j, 0);
}
}

BufferedImage theImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
int value = pixel[i][j] << 16 | pixel[i][j] << 8
| pixel[i][j];
theImage.setRGB(i, j, value);
}
}

File outputfile = new File("f:/op.png");
try {
ImageIO.write(theImage, "png", outputfile);
} catch (IOException e1) {

}
}
}

此代码只是读取和写入灰度图像的示例。这里我使用光栅读取图像并设置 rgb 写入图像。您还可以使用 get 和 setRGB 来读取和写入图像。写入的图像格式必须是 bmp、gif、png 等。由于 jpg、jpeg 在以这些格式写入后是有损压缩,我们可能会得到全黑图像。在查看图像的数组值时,我们可能会得到 0 或 1 或 2 个值作为像素强度。因此,使用 png。

关于java - 在java中以像素为单位读取和写入图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15828527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com