(关于我正在研究的Java项目,我上周在SO上发了三篇文章。我感到内疚,但到底是什么,你的答案太棒了。)
这是C#中的一大块代码:
Bitmap bitmap = ...
int dstStride = bitmap.Stride;
byte* bdst = (byte*)bitmap.Scan0;
我想在Java中创建一个等效的算法。基于other, similar questions,我开始认为这是不可能的。
我实际上可以复制我的位图的步幅信息,但当然,byte*
几乎不可能重现。稍后发生的是有一个for
循环操纵位图图像,la:
bdst[x * 3 + y * dstStride + 2] = (byte)(alpha * bsrc[dx * 3 + L * srcStride + 2]);
(x& y是循环中的迭代器)
当然,我无法简单地将bdst设为字节数组,因为这没有意义。 According to this totally awesome article,Scan0是“它在固定数据阵列的内存中的地址。”
根据上述SO帖子判断,这在Java中是不可能的。确认/否认?
答案 0 :(得分:1)
您无法直接指向Java中的内存。这显然是设计上的。
但是,您可以使用PixelGrabber类从Image获取像素数组。或者,如果您有BufferedImage,则可以直接使用Raster。这可以帮助您实现目标而无需直接访问内存。