【问题标题】:createBitmap not loading subimage correctly OR draw(Canvas) not displaying properlycreateBitmap 未正确加载子图像或绘制(画布)未正确显示
【发布时间】:2014-12-30 18:04:06
【问题描述】:

我有一个资源“cards.png”,其中包含一副纸牌所需的所有卡片。

资源正好是 896x352,每张卡片正好是 64x88。

“卡片”对象是一个简单的对象,有一个花色字符串、一个数值字符串和一个位图。

我使用“Bitmap.createBitmap”从大的原始图像创建子图像。 后来,当我绘制时,该函数似乎没有正确加载图像。有些卡片“偏移”了许多像素,当我尝试从左到右读取图像时,它似乎变得更糟。

我已经尝试了所有方法,发现这里有很多没有答案的类似问题,所以想知道我是不是走错了路?

“/game/res/drawable”文件夹中引用了资源“R.drawable.cards”。

加载卡片位图的代码是:

public GameScreen(Context context){
    int x=0, y=0;
    Bitmap cards = BitmapFactory.decodeResource(context.getResources(), R.drawable.cards);
    for (Card card: deck.getCards()){
        if (card.getSuit().equals("C")){
            y = 0;
        } else if (card.getSuit().equals("D")){
            y = 88;
        } else if (card.getSuit().equals("H")){
            y = 176;
        } else if (card.getSuit().equals("S")){
            y = 264;
        } else {
            x=0;
            y=0;
        }

        if (card.getValue().equals("A")){
            x = 0;
        } else if (card.getValue().equals("10")){
            x = 576;
        } else if (card.getValue().equals("J")){
            x = 640;
        } else if (card.getValue().equals("Q")){
            x = 704;
        } else if (card.getValue().equals("K")){
            x = 768;
        } else if (card.getValue().equals("Joker")){
            // Joker
            x = 832;
        } else {
            x = 64 * (Integer.parseInt(card.getValue())-1);
        }

        Bitmap bitmap = Bitmap.createBitmap(cards, x, y, CardBitmapWidth, CardBitmapHeight);
        card.setBitmap(bitmap);

    }
}

要绘制的代码是:

public void draw(Canvas canvas){
    int x = 0;
    int y = 0;

    for (Card card: cards){
        canvas.drawBitmap(card.getBitmap(), x, y, null);
        x += card.getBitmap().getWidth();
        if (x>canvas.getWidth()){
            x = 0;
            y += card.getBitmap.getHeight();
        }
     }
}

【问题讨论】:

  • R.drawable.cards 引用的位图在哪里? res/drawable-?
  • 是的,在“res/drawable”下。
  • res/drawable 还是 res/drawable-something?
  • 不,只有 res/drawable。
  • 放在 res/drawable-nodpi 中

标签: android bitmap


【解决方案1】:

确保图像在加载时没有被缩放:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;
Bitmap cards = BitmapFactory.decodeResource(context.getResources(), R.drawable.cards, options);

【讨论】:

  • 是的,这是有道理的,谢谢。但我能问一下吗?它是针对什么进行缩放的?我还没有绘制到画布上,那么函数在加载位图时使用的是什么对象?
  • 默认情况下,它会在加载时根据要渲染到的目标的像素密度缩放位图,而不是在渲染时缩放。默认情况下,目标密度只是您正在运行的设备的屏幕密度,因此在高分辨率设备上,位图会按比例放大。文档中的更多信息:developer.android.com/reference/android/graphics/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多