gpt4 book ai didi

android - 缩放位图以适合 Canvas

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:03:31 25 4
gpt4 key购买 nike

我试图在机器人上编写游戏,我处理不同屏幕分辨率的方式是制作目标分辨率 (320x480) 的位图,从中制作 Canvas 并使用固定坐标在其上绘制所有元素,然后我只是在 surfaceView Canvas 上绘制这个位图,它会在不同的屏幕上重新缩放。问题是,当我在我的框架上绘制东西时,即使框架与位图的大小相同,位图也会超出范围。 (位图为 320x480,它被拉伸(stretch)并且不适合屏幕)这是代码:

public class Graphics {

private Bitmap frameBuffer, grid;
private Canvas canvas;

public Graphics(Context context) {

frameBuffer = Bitmap.createBitmap(320, 480, Config.ARGB_8888);
canvas = new Canvas(frameBuffer);

grid = BitmapFactory.decodeResource(context.getResources(),
R.drawable.grid);
}

public Bitmap present() {
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(grid, 0, 0, null);
return frameBuffer;
}

和 SurfaceView 类:

public class GameView extends SurfaceView implements Runnable {

private SurfaceHolder holder;
private Boolean running;
private Thread renderThread;
private Graphics graphics;

public GameView(Context context, Graphics graphics) {
super(context);
this.holder = getHolder();
this.graphics = graphics;
}

public void resume() {
running = true;
renderThread = new Thread(this);
renderThread.start();
}

public void run() {
Rect dstRect = new Rect();
while (running) {
if (!holder.getSurface().isValid())
continue;

Bitmap frameBuffer = graphics.present();

Canvas canvas = holder.lockCanvas();
canvas.getClipBounds(dstRect);
canvas.drawBitmap(frameBuffer, null, dstRect, null);
holder.unlockCanvasAndPost(canvas);
}
}

public void pause() {
running = false;
while (true) {
try {
renderThread.join();
break;
} catch (InterruptedException e) {
// retry
}
}
}

谁能给出一些提示? PS 如果我直接将位图绘制到 SurfacView Canvas 上,它会完美缩放。

最佳答案

我将添加到 nycynik 和 nikmin 的回答中。

您可以利用“createScaledBitmap”函数将位图缩放到屏幕(也就是 Canvas )的大小。尝试使您的位图资源具有相当高的分辨率,这样如果它在更大的屏幕上使用,它就不会出现难看的缩放伪像。

关于android - 缩放位图以适合 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8115084/

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