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