gpt4 book ai didi

java - 如何在循环中设置数组的 3 个连续位置和 RGB 值

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

我定义了一个颜色模块,它对 RGB vector 执行一些基本操作。

在对每个像素的 RGB 值应用一些操作后,我试图在 java 中导出图像。我有一个大小为:height*width 的数组,我在循环中对其进行迭代,执行此操作的代码片段:

byte[] rgbData = new byte[this.imageWidth * this.imageHeight * 3];
for (int x = 0; x < this.imageWidth; x++) {
for (int y = 0; y < this.imageHeight; y++) {
Color color=this.scene.getPixelColor(x, y, this.imageWidth, this.imageHeight);
rgbData[(y * this.imageWidth + x) * 3] = color.getRedByte();
rgbData[(y * this.imageWidth + x) * 3 + 1] = color.getGreenByte();
rgbData[(y * this.imageWidth + x) * 3 + 2] = color.getBlueByte();

}
}

我试图在一行中设置所有 3 个 RGB 值。类似的东西(只是一个伪代码):

byte[] rgbData = new byte[this.imageWidth * this.imageHeight * 3];
for (int x = 0; x < this.imageWidth; x++) {
for (int y = 0; y < this.imageHeight; y++) {
Color color=this.scene.getPixelColor(x, y, this.imageWidth, this.imageHeight);
rgbData[(y * this.imageWidth + x) * 3 <0:2>] =color.returnRGB()
}
}

我在两个问题上遇到了困难:

  1. 如何对数组执行该操作?

  2. 如何实现color模块中的returnRGB()方法?

将不胜感激,谢谢

最佳答案

在 Java 中执行此操作的惯用方法是从 InputStream.read(buf,off,len) 和其他将输出生成到数组的常用方法中获取提示。

您的returnRGB 方法应该是这样的:

Color
{
...
public void getRGBBytes(byte[] dest, int offset)
{
dest[offset++] = redValue;
dest[offset++] = greenValue;
dest[offset] = blueValue;
}
}

然后你这样调用它:

color.getRGBBytes(rgbdata, (y * this.imageWidth + x) * 3);

这种样式经常用于性能很重要的地方,因为它避免了创建临时对象。这些通常与使用原始数组的情况相同,因此这是一个适当的关注点。

不过,我应该提一下,通常情况下,图像处理循环也可以在不创建临时对象的情况下实现——您需要为每个像素获取一个颜色对象,这使得该循环比应有的速度慢很多。

在用于 scene 的任何类中实现此方法会更有效,因此您可以这样做,并完全避免创建临时对象:

this.scene.getPixelRGBBytes(x, y, rgbdata, (y * this.imageWidth + x) * 3); 

关于java - 如何在循环中设置数组的 3 个连续位置和 RGB 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56040662/

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