gpt4 book ai didi

android - 如何在 android 中 blit()?

转载 作者:可可西里 更新时间:2023-11-01 19:05:39 27 4
gpt4 key购买 nike

我习惯于使用老式库(allegro、GD、pygame)处理图形,如果我想将位图的一部分复制到另一位...我只使用 blit。

我正试图弄清楚如何在 android 中做到这一点,但我感到非常困惑。那么...我们有这些只写的 Canvas 和只读的 Bitmaps 吗?看起来愚蠢得不像真的,一定有什么我想念的,但我真的想不通。

编辑:更准确地说...如果位图是只读的,而 Canvas 是只写的,我不能将 A 写入 B,然后将 B 写入 C?

最佳答案

将一个位图复制到另一个位图的代码是这样的:

Rect src = new Rect(0, 0, 50, 50); 
Rect dst = new Rect(50, 50, 200, 200);
canvas.drawBitmap(originalBitmap, src, dst, null);

指定您要复制位图的左上角 (50x50),然后将其拉伸(stretch)为 150x150 的位图,并将其写入距 Canvas 左上角 50px 的偏移量。

您可以通过 invalidate() 触发绘图,但如果您正在制作动画,我建议您使用 SurfaceView。 invalidate 的问题是它只在线程空闲时绘制,所以你不能在循环中使用它——它只会绘制最后一帧。以下是我回答过的有关图形的其他问题的一些链接,它们可能有助于解释我的意思。


为了回应评论,这里有更多信息:如果您从 SurfaceHolder.lockCanvas() 获取 Canvas ,那么我认为您无法将其中的剩余数据复制到位图中。但这不是该控件的用途 - 只有当您整理好所有内容并准备好绘制时,您才使用 than。

你想要做的是创建一个 Canvas ,使用

Canvas canvas = new Canvas(yourBitmap)

然后您可以进行任何您想要的转换和绘图操作。 yourBitmap 将包含所有最新信息。 然后您可以像这样使用表面支架:

Canvas someOtherCanvas = surfaceHolder.lockCanvas()
someOtherCanvas.drawBitmap(yourBitmap, ....)

这样一来,您总能得到您的位图,其中包含您要保留的任何信息。

关于android - 如何在 android 中 blit()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2618355/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com