【问题标题】:Android: cut a part off a bitmap and scale itAndroid:从位图上切下一部分并对其进行缩放
【发布时间】:2013-01-05 23:25:52
【问题描述】:

首先我想说,我确实读了很多书,但我并没有发现这个问题……

目前我的代码运行良好。我有一个位图,然后我剪下我的位图的一部分并绘制它。

this.card = new ImageView(this); //this is my ImageView
//and my bitmap...
this.bmCards = BitmapFactory.decodeResource(getResources(), R.drawable.cardgame);

//and here I set the bitmap as Image of this ImageView
this.card.setImageBitmap(getCard(Stapel.getCard()));

调用的方法如下:

private Bitmap getCard(Card c) {

    //some arithmetic to calculate the size...

    Bitmap result = Bitmap.createBitmap(cardW, cardH, Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(result);
    canvas.drawBitmap(bmCards, new Rect(x, y, x + cardW + toleranzW, y + cardH + toleranzH), 
            new Rect(0, 0, cardW, cardH), new Paint());

    return result;
}

到目前为止它可以工作.. 但是我如何调整此图像的大小? 我的意思是在画布上绘制位图的右侧部分,但我想稍微缩放这部分,因为它太小了……可能是实际 H * 1,5 和实际 W * 1,5 之类的。

【问题讨论】:

    标签: android bitmap textview android-canvas


    【解决方案1】:

    我想你可以用这个:

    Matrix matrix = new Matrix();
    matrix.postScale(scaleWidth, scaleHeight);
    resizedBitmap = Bitmap.createBitmap(originalBitmap, 0, 0, originalBitmap.getWidth(),
                    originalBitmap.getHeight(), matrix, false);
    

    在你得到调整大小的位图后,你可以在画布上绘制它..

    编辑

    请试试这个.. 我没试过.. 你应该使用我在 cmets 中写给你的值.. 你还应该阅读 createBitmap()postScale() 文档以了解你在那里做什么:)

    private Bitmap getCard(Card c) {
    
        //some arithmetic to calculate the size...
    
        Bitmap result = Bitmap.createBitmap(cardW, cardH, Bitmap.Config.ARGB_8888);
    
        Matrix matrix = new Matrix();
        matrix.postScale(20, 20);
        result = Bitmap.createBitmap(result, 0, 0, result.getWidth(),
                        result.getHeight(), matrix, false);
    
        Canvas canvas = new Canvas(result);
        canvas.drawBitmap(bmCards, new Rect(x, y, x + cardW + toleranzW, y + cardH + toleranzH), 
                new Rect(0, 0, cardW, cardH), new Paint());
    
        return result;
    }
    

    【讨论】:

    • 是的..我看到了这样的东西..但我真的不知道我应该设置什么尺寸,因为我同时切割和绘制,我真的不知道我应该设置什么尺寸到“结果”,因为我的画布是用“结果”创建的
    • 我从您的问题中了解到您想将位图调整为特定大小.. 对吗?如果是正确的,那么只需玩一下 scaleWidth 和 scaleHeight 直到你得到你想要的。如果我没有做对,请更具体地说明你想要什么。:)
    • 你能不能把你的例子改成我的代码,因为我看到了你之前写的东西,但我不知道如何在我的代码中使用它。在这种情况下,我有点卡住了位
    • hmm.. 问题是现在,如果我写 matrix.postScale(0.5f,0.5f) 它只显示图片的 1/4.. 左上角.. 如果我编辑结果大小为 2*cardW, 2*cardH 图片不再缩放
    • 我可以通过使用 matrix.postScale(2,2) 让它变小,但是如果我把它变大它就不适合,就像我说的那样
    【解决方案2】:

    在绘制之前使用矩阵进行平移和旋转。这通常是最简单的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多