Доступ к информации растровой памяти с использованием байтов - PullRequest
2 голосов
/ 10 ноября 2010

(На прошлой неделе я написал три сообщения на SO о проекте Java, над которым я работаю. Я чувствую себя виноватым, но, черт возьми, ваши ответы потрясающие.)

Вот фрагмент кода на C #:

Bitmap bitmap = ...

int dstStride = bitmap.Stride;

byte* bdst = (byte*)bitmap.Scan0;

Я хочу сделать эквивалентный алгоритм на Java. Я начинаю думать, что это невозможно, основываясь на других похожих вопросах .

Я действительно могу скопировать информацию о шагах моего растрового изображения, но, конечно, byte* почти невозможно воспроизвести. Что произойдет позже, так это то, что есть цикл for, который управляет растровым изображением, а именно:

bdst[x * 3 + y * dstStride + 2] = (byte)(alpha * bsrc[dx * 3 + L * srcStride + 2]);

(x & y - итераторы в цикле)

Естественно, я не могу просто сделать bdst байтовым массивом, потому что это не имеет смысла. Согласно этой совершенно потрясающей статье , Scan0 - это «[t] адрес в памяти фиксированного массива данных».

И, судя по вышеприведенному SO сообщению, это невозможно в Java. Подтвердить / опровергнуть?

1 Ответ

1 голос
/ 10 ноября 2010

Вы не можете получить прямой указатель на память в Java.Это очевидно по своему замыслу.

Однако вы можете получить массив пикселей из изображения, используя класс PixelGrabber .Или, если у вас есть BufferedImage , вы можете работать с Raster напрямую.Это может помочь вам достичь своей цели без непосредственного доступа к памяти.

...