gpt4 book ai didi

android - 缩放到高分辨率时绘制位图很慢

转载 作者:行者123 更新时间:2023-11-29 02:07:41 25 4
gpt4 key购买 nike

我有一个非常简单的任务要做,那就是在自定义 View 中绘制背景图像。我创建了一个位图并缩放它以适合 View 的宽度和高度。这会使应用程序变慢,速度减半(我每 10 毫秒打印一次时间值以衡量性能速度)。这是代码:

public class GView extends View {

int w, h;
Bitmap bg;
int time = 0;

boolean created = false;
public GView(Context context) {
super(context);
bg = BitmapFactory.decodeResource(getResources(), R.drawable.my_image);
new Timer();
}

@Override
public void onDraw(Canvas c) {
Paint p = new Paint();
if(!created) {
w=getWidth();
h=getHeight();
p.setColor(Color.RED);
p.setTextSize(40);
bg = Bitmap.createScaledBitmap(bg, w, h, false);
created = true;
}
if(created) {
time++;
c.drawBitmap(bg, 0,0,null);
c.drawText(time+"", (int)(w/4), (int)(h/4), p);
}

}

class Timer extends Handler {
private Timer() {
handleMessage(obtainMessage(0));
}

@Override
public void handleMessage(Message m) {
invalidate();
sendMessageDelayed(obtainMessage(0), 10);
}
}

仅供引用,原始图像为 300x225。我将图像缩放到的平板电脑屏幕分辨率为 1280x800。问题是,如果我将背景图像缩放为 (int)(.8*w)、(int)(.8*h) 或更小或根本不缩放图像,那么它会按预期快速运行。

我尝试使用 ImageView 并使用 setImageResource(R.drawable.my_image) 但速度还是很慢。我认为绘制适合背景的图像对于任何编程语言来说都应该非常简单,但即使经过大量搜索,我也遇到这个问题很长时间了。我希望有人能给我一个正确的答案。非常感谢。

最佳答案

createScaledBitmap() 不应在您的 onDraw() 例程中完成。它非常慢,因为它使用像素平均例程来“平滑”拉伸(stretch)的位图。在 gui 线程之外创建拉伸(stretch)位图,然后在 onDraw() 方法中绘制它 (canvas.drawBitmap)。如果设置为 false,过滤器参数可用于创建“最近邻”缩放。这看起来“ block 状”,但处理速度要快得多。

public static Bitmap createScaledBitmap
(Bitmap src, int dstWidth, int dstHeight, boolean filter)

关于android - 缩放到高分辨率时绘制位图很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9110921/

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