gpt4 book ai didi

java - 如何从存储为 r、g、b 的像素创建图像,每个像素在数组中占据不同的位置?

转载 作者:行者123 更新时间:2023-12-01 05:29:23 25 4
gpt4 key购买 nike

我正在读取 .jpg 图像并访问像素:

if (type == BufferedImage.TYPE_3BYTE_BGR) {
System.out.println("type.3byte.bgr");
byte[] pixels = (byte[]) sourceImage.getData().getDataElements(0, 0, w, h, null);
}

//处理这个名为像素的数组并显示结果图像//首先我将其转换为整数

int offseet=0;
int[] data=new int[width*height*3];
for ( i = 0; i < data.length; i++) {
data[i] = pixels[offset++] & 0xff;
}

//然后处理这个数组。 目前我还没有处理它。现在当我创建一个缓冲//来自data数组的图像和显示它显示的图像不一样。//我使用的代码是

 writeEdges(data);


private BufferedImage edgesImage;
private void writeEdges(int arb[]) {
if (edgesImage == null) {
edgesImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
}

edgesImage.getWritableTile(0, 0).setDataElements(0, 0, width,height, arb);
}

//用于penguins.jpg图像(在Windows 7中的示例图片中提供)!

image

我得到的输出是

image

最佳答案

我不知道你的代码是如何运行的,因为它不会像 jcomeau_ictx 指出的那样编译。问题是您使用不同的图像类型进行读取和写入。这是一个代码片段,它将生成与输入相同的图像。

public static void main(String[] args) {

BufferedImage sourceImage = null;
try {
sourceImage = ImageIO.read(new File("IScSH.jpg"));
} catch (IOException e) {
}

int type = sourceImage.getType();
int w = sourceImage.getWidth();
int h = sourceImage.getHeight();
byte[] pixels = null;
if (type == BufferedImage.TYPE_3BYTE_BGR) {
System.out.println("type.3byte.bgr");
pixels = (byte[]) sourceImage.getData().getDataElements(0, 0, w, h, null);
}
try {
BufferedImage edgesImage = new BufferedImage(w, h, BufferedImage.TYPE_3BYTE_BGR);
edgesImage.getWritableTile(0, 0).setDataElements(0, 0, w, h, pixels);
ImageIO.write(edgesImage, "jpg", new File("nvRhP.jpg"));
} catch (IOException e) {
}
}

关于java - 如何从存储为 r、g、b 的像素创建图像,每个像素在数组中占据不同的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9247205/

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