Android - 调整位图大小会削减它而不是缩放它

时间:2013-08-23 01:58:00

标签: android bitmap scale

我有一个应用程序,用户可以在其中绘制尺寸为W = Match Parent和H = 250dp的视图。

我需要将其调整为W = 399像素和H = 266像素,以便我可以通过蓝牙热敏打印机正确打印。我得到了调整大小的图像所需的尺寸,但是,我得到的输出是原始的切割版本,其尺寸是我想要的缩放尺寸。

这是我用来从视图中获取数据并调整其大小的代码。

Bitmap bitmap = Bitmap.createBitmap(mView.getWidth(), mView.getHeight(), Bitmap.Config.ARGB_8888);
ByteArrayOutputStream stream = new ByteArrayOutputStream();

bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream);

//Resize the image
Bitmap resizedImage = Bitmap.createScaledBitmap(bitmap, 399, 266, false);


//code for resized
Canvas c = new Canvas(resizedImage);
c.drawColor(Color.WHITE);
c.drawBitmap(resizedImage, 0, 0, null);
mView.draw(c);

resizedImage.compress(Bitmap.CompressFormat.PNG, 90, stream);

我在这里做错了什么?

编辑: 我认为问题是我正在绘制调整大小的图像的画布很大,并且出于某种原因,绘图命令不起作用,每当我打印时,它都会打印该画布的原始内容。

3 个答案:

答案 0 :(得分:0)

尝试使用Matrix调整位图大小。

public static Bitmap resizeBitmap(Bitmap bitmap, int width, int height) {
    int w = bitmap.getWidth();
    int h = bitmap.getHeight();
    Matrix matrix = new Matrix();
    float scaleWidth = ((float) width / w);
    float scaleHeight = ((float) height / h);
    matrix.postScale(scaleWidth, scaleHeight);
    Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);
    return newbmp;
}

答案 1 :(得分:0)

public static Bitmap resizeBitmap(Bitmap bitmap, int width, int height) { //width - height in pixel not in DP
    bitmap.setDensity(Bitmap.DENSITY_NONE); 
    Bitmap newbmp = Bitmap.createScaledBitmap(bitmap, width, height, true);
    return newbmp;
}

答案 2 :(得分:0)

问题是调整大小后的图像的位图是在创建获取用户输入的位图后立即实例化的。这是我的代码有效。

但请注意,我制作了一个imageView来保存已调整大小的图像。

    ByteArrayOutputStream stream = new ByteArrayOutputStream();

    //get the user input and store in a bitmap
    Bitmap bitmap = Bitmap.createBitmap(mView.getWidth(), mView.getHeight(), Bitmap.Config.ARGB_8888);


    //Create a canvas containing white background and draw the user input on it
    //this is necessary because the png format thinks that white is transparent
    Canvas c = new Canvas(bitmap);
    c.drawColor(Color.WHITE);
    c.drawBitmap(bitmap, 0, 0, null);

    //redraw 
    mView.draw(c);

    //create resized image and display
    Bitmap resizedImage = Bitmap.createScaledBitmap(bitmap, 399, 266, true);
    imageView.setImageBitmap(resizedImage);