2010-11-10 1 views
2

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

Вот кусок кода в C#:

Bitmap bitmap = ... 

int dstStride = bitmap.Stride; 

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

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

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

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

(х & у являются итераторы в цикле)

Естественно я не могу просто сделать bdst байт массив, потому что это не имеет смысла. According to this totally awesome article, Scan0 - это «[t] адрес в памяти массива фиксированных данных».

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

+0

Не знаете, почему вы не можете рассматривать bdst как массив байтов? Это именно то, что есть. Класс C# Bitmap - это оболочка поверх собственного растрового объекта, который, очевидно, представляет внутренние данные изображения в качестве указателя на первую ячейку памяти. – VinayC

ответ

1

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

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

Смежные вопросы