Как быстро инициализировать BufferedImage в Java? - PullRequest
1 голос
/ 08 февраля 2011

У меня есть следующий код Java:

public static BufferedImage createImage(byte[] data, int width, int height)
{
  BufferedImage res = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);

  byte[] rdata = ((DataBufferByte)res.getRaster().getDataBuffer()).getData();

  for (int y = 0; y < height; y++) {
    int yi = y * width;
    for (int x = 0; x < width; x++) {
      rdata[yi] = data[yi];
      yi++;
    }
  }

  return res;
}

Есть ли более быстрый способ сделать это?

В C ++ я бы использовал memcpy, но в Java?

Или, возможно, можно инициализировать полученное изображение непосредственно с переданными данными?

1 Ответ

6 голосов
/ 08 февраля 2011

Ну, для быстрого копирования массива вы можете использовать System.arraycopy:

System.arraycopy(data, 0, rdata, 0, height * width);

Я не знаю об инициализации BufferedImage, хотя, боюсь,

Вы пробовали:

res.getRaster().setDataElements(0, 0, width, height, data);

...