【发布时间】:2010-11-10 05:12:05
【问题描述】:
(上周我在 SO 上发表了三篇关于我正在从事的 Java 项目的帖子。我感到内疚,但到底是什么,你的回答太棒了。)
这是一段 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 是“[t]he address in memory of the fixed data array.”
从上面的 SO 帖子来看,这在 Java 中是不可能的。确认/拒绝?
【问题讨论】:
-
不确定为什么不能将 bdst 视为字节数组?这正是它的本质。 C# Bitmap 类是原生位图对象的包装器,它显然将内部图像数据表示为指向第一个内存位置的指针。