首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在android中使用blit()?

如何在android中使用blit()?
EN

Stack Overflow用户
提问于 2010-04-11 19:17:33
回答 2查看 9K关注 0票数 14

我习惯于用旧的程序库处理图形(快板,GD,游戏),如果我想把位图的一部分拷贝到另一个.我只是用blit。

我想弄清楚如何在android上做这件事,我很困惑。所以..。我们有只写的画布和只读的位图?这看起来太愚蠢了,不可能是真实的,一定有什么东西我错过了,但我真的搞不懂。

编辑:更准确地说.如果位图是只读的,而画布是只写的,我不能把A写成B,然后B写到C?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-21 13:41:36

将一个位图复制到另一个位图的代码如下所示:

代码语言:javascript
复制
Rect src = new Rect(0, 0, 50, 50); 
Rect dst = new Rect(50, 50, 200, 200);  
canvas.drawBitmap(originalBitmap, src, dst, null);

它指定要复制位图的左上角(50x50),然后将其拉伸到150×150位图中,并将其从画布的左上角写入50 to偏移量。

您可以通过doing ()触发绘图,但是如果您正在做动画,我建议您使用SurfaceView。失效的问题是,它只在线程空闲时绘制,所以不能在循环中使用它--它只绘制最后一个帧。这里有一些链接,我已经回答了关于图形的其他问题,它们可能有助于解释我的意思。

的触摸control

作为对评论的回应,这里有更多的信息:如果您从SurfaceHolder.lockCanvas()获得画布,那么我认为您无法将其中的剩余数据复制到位图中。但这不是那个控件的用途--你只需要使用,而不是当你把所有的东西都整理好,你就可以画了。

您要做的是创建一个画布,将其绘制到位图中。

代码语言:javascript
复制
Canvas canvas = new Canvas(yourBitmap)

然后,您可以进行任何转换并绘制您想要的操作。yourBitmap将包含所有最新信息。然后,您使用表面支架如下:

代码语言:javascript
复制
Canvas someOtherCanvas = surfaceHolder.lockCanvas()
someOtherCanvas.drawBitmap(yourBitmap, ....)

这样,您就可以得到yourBitmap,它包含了您想要保存的任何信息。

票数 18
EN

Stack Overflow用户

发布于 2010-04-21 13:27:20

在android中,您可以在画布上绘图,当您想要它更新时,您可以调用失效调用,从而将此画布重绘到屏幕上。因此,我猜想您已经重写了视图的onDraw方法,所以只需添加view ()即可;

代码语言:javascript
复制
@Override
public void onDraw(Canvas canvas) {
    // Draw a bitmap to the canvas at 0,0
    canvas.drawBitmap(mBitmap, 0, 0, null);
    // Add in your drawing functions here
    super.onDraw(canvas);
    // Call invalidate to draw to screen
    invalidate();
}

上面的代码只是不断地重新绘制位图,当然,您想要添加额外的东西来绘制并考虑使用一个调用无效的计时函数,这样它就不会一直运行。我建议你看看月球探测器的消息来源。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2618355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档