По какой-то причине, я могу изменить буферное изображение с помощью setRGB, но не с помощью фактического целочисленный массив в растре:Почему я не могу изменить этот BufferedImage?
Это работает
BufferedImage img = new BufferedImage(32, 32, BufferedImage.TYPE_INT_RGB);
for (int y = 0; y < 32; y++) {
for (int x = 0; x < 32; x++) {
int gray = (int) (MathUtil.noise(x, y) * 255); //I have tested the noise function, and know it works fine
img.setRGB(x, y, gray << 16 | gray << 8 | gray);
}
}
Это не
BufferedImage img = new BufferedImage(32, 32, BufferedImage.TYPE_INT_RGB);
int[] data = ((DataBufferInt) img.getData().getDataBuffer()).getData();
for (int y = 0; y < 32; y++) {
for (int x = 0; x < 32; x++) {
int gray = (int) (MathUtil.noise(x, y) * 255); //I have tested the noise function, and know it works fine
data[x + y * 32] = gray << 16 | gray << 8 | gray;
}
}
Функция шума:
public static float noise(int x, int y) {
int n = x + y * 57;
n = (n << 13)^n;
return Math.abs((1.0f - ((n * (n * n * 15731 + 789221) + 1376312589) & 0x7fffffff)/1073741824.0f));
}
EDIT
Nevermind Я исправил его. Мне нужно было использовать getRaster: P
Какая ошибка? – 5gon12eder
@ 5gon12eder Нет ошибки, изображение должно быть некогерентным шумом, но получается черным – name
Почему вы заново изобретаете колесо (через функцию 'noise')? – specializt