gpt4 book ai didi

Android,将位图绘制到 Canvas 的最快方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:26:15 25 4
gpt4 key购买 nike

只是想知道将位图绘制到 Canvas 的最快方法是什么?

目前我有一个位图(和用于绘图的 Canvas ),用于双缓冲绘图调用,然后当我绘制到 Canvas 时,通过应用 1px Canvas 转换产生滚动效果。仅此一项就会将帧率从 60+ FPS 降低到 ~40,相当成功。我现在没有使用 surfaceView(或 GLSurfaceView),只是想知道我是否遗漏了任何可以提高速度的东西。 onDraw() 代码如下

@Override
public void onDraw(Canvas canvas)
{
//update fps text
mFpsTracker.frameTouch();

if(mBufferedBitmap == null)
{
mBufferedBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_4444);
mBufferedCanvas = new Canvas(mBufferedBitmap);
}

paint.setColor(Color.BLUE);
mBufferedCanvas.drawLine(0, getHeight(), getWidth(), getHeight(), paint);
mBufferedCanvas.translate(0, -1);


canvas.drawBitmap(mBufferedBitmap, 0, 0, null);

//draw fps
mTextPaint.setColor(Color.WHITE);
canvas.drawText(mFpsTracker.getFPSString(), 40, 40, mTextPaint);


invalidate();
}

最佳答案

请参阅this Romain Guy 的博文。

视频版本可用here .

不要再使用 ARGB_4444。它已被弃用。每个像素每个 channel 仅分配 4 位(因此得名)。 ARBG_8888 提供 16,777,216 种颜色而不是 ARBG_4444 的 4,096 种颜色,但每个像素使用 4 个字节而不是 2 个字节。

在 Gingerbread 中,Android 将 ARGB_8888 作为 Surface 的标准格式并因此增加了每个进程的内存分配。

设置您的 Window's 效率更高并且(假设您使用的是流线型 SurfaceView )SurfaceHolder 的格式为 RGBA_8888 .这避免了明显较慢的格式更改。

其他提示包括:

  • 限制 alpha 合成,因为这需要相对昂贵的 Skia 混合。
  • 请求位图 Options喜欢 ARGB_8888 Config并禁用抖动。
  • 删除窗口 background如果可能的话。
  • 启用硬件加速,但要注意unsupported operations .

在 2.1 设备上,我能够以 50 fps 的速度在屏幕上绘制至少 300 个位图。

关于Android,将位图绘制到 Canvas 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6856550/

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