【问题标题】:Accessing bitmap memory info using bytes使用字节访问位图内存信息
【发布时间】: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 类是原生位图对象的包装器,它显然将内部图像数据表示为指向第一个内存位置的指针。

标签: c# java bitmap byte


【解决方案1】:

您无法在 Java 中获得指向内存的直接指针。这显然是设计使然。

但是,您可以使用 PixelGrabber 类从图像中获取像素数组。或者,如果您有BufferedImage,您可以直接使用Raster。这可以帮助您在不直接访问内存的情况下实现目标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多