0

我有一个应用程序,用户可以在其中绘制尺寸为 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);

我在这里做错了什么?

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

4

3 回答 3

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;
}
于 2013-08-23T02:12:40.580 回答
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;
}
于 2013-08-23T04:40:30.937 回答
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);
于 2013-08-24T08:46:15.297 回答