从 Android Canvas 获取像素值

Posted

技术标签:

【中文标题】从 Android Canvas 获取像素值【英文标题】:Get Pixel Values from Android Canvas 【发布时间】:2010-07-09 12:29:13 【问题描述】:

我目前正在使用surfaceView 编写一个android 游戏。我已经尽可能地优化了游戏,它运行得非常流畅。但是,我结合了碰撞检测,这有点混乱。我想通过直接从画布读取像素来进行碰撞检测。这可能吗?我发现最接近这个的方法是使用 setBitmap 将新位图附加到画布上。然后当我画到画布上时,位图就会更新。这是要走的路吗?谢谢。

【问题讨论】:

【参考方案1】:

虽然您应该以不同的方式管理碰撞检测,但您可以使用下一行代码获取给定位置的像素颜色:

mView.mBitmap.getPixel(j, i)

mView 是包含您的画布的视图,mBitmap 是您创建画布时使用的位图:

Canvas mCanvas = new Canvas(mBitmap);

【讨论】:

【参考方案2】:

来自Canvas API:

Canvas 类持有“draw” 来电。要画一些东西,你需要 4 基本组件:一个位图来保存 像素,一个画布来承载绘图 调用(写入位图), 绘制图元(例如 Rect、Path、 文本、位图)和绘画(到 描述颜色和样式 图)。

所以你永远不会向画布询问像素数据,因为画布本身并不真正“拥有”像素数据。用于进行绘图调用的画布始终附加到位图(您正在绘制的那个),因此您应该从该位图获取像素数据。

碰撞检测通常成本高昂,但使用基于位图的过程可能会使情况变得更糟,具体取决于您要执行的操作。请注意。

【讨论】:

【参考方案3】:

我同意乔希的观点。如果精度在您的应用程序中如此重要,您可能希望将屏幕尺寸/分辨率数据合并到某种物理引擎中。试图构建一个完全基于视觉处理的物理引擎可能是不必要的昂贵。

【讨论】:

以上是关于从 Android Canvas 获取像素值的主要内容,如果未能解决你的问题,请参考以下文章

html5 canvas系列教程-像素操作(反色,黑白,亮度,复古,蒙版,透明)

请问delphi 7 如何读取JPG图片的像素颜色值?

HTML5画布Canvas图片抽取像素信息获取命中检测

android中,如何用canvas绘制透明?

Android获取设备屏幕宽高像素值的两个方法

android从onPreviewFrame获取像素数据转换为位图