将位图重新调整为更小的位图

Joa*_*rom 2 android bitmap android-canvas

我有一个位图列表。我想要的是获取这些位图,并在画布的帮助下,从我拥有的位图列表中创建一个带有缩小图像的新位图(意思是,使它们非常小)。

我已经设法做到了,但是由于缩小了图像,图像看起来很糟糕。我尝试了很多东西,设置,创建新画布等。

简单的第一个解决方案看起来像这样(下面的代码),但是,正如我所说,图像看起来很糟糕。

public static Bitmap folderBitmap(Bitmap bitmap[]) {

    Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.RGB_565);
    Canvas c = new Canvas(b);

    c.drawARGB(255, 255, 255, 255);

    Paint paint = new Paint();
    paint.setAntiAlias(false);
    paint.setFilterBitmap(false);
    paint.setDither(true);

    c.drawBitmap(getBit(bitmap), 4, 4, paint);
    c.drawBitmap(getBit(bitmap), 35, 4, paint);
    c.drawBitmap(getBit(bitmap), 67, 4, paint);

    c.drawBitmap(getBit(bitmap), 4, 35, null);
    c.drawBitmap(getBit(bitmap), 35, 35, null);
    c.drawBitmap(getBit(bitmap), 67, 35, null);

    c.drawBitmap(getBit(bitmap), 4, 67, null);
    c.drawBitmap(getBit(bitmap), 35, 67, null);
    c.drawBitmap(getBit(bitmap), 67, 67, null);

    return b;
}

private static Bitmap getBit(Bitmap[] b) {
    Bitmap newBitmap = Bitmap.createScaledBitmap(b[getR()], 28, 28, false);

    return newBitmap;
}

private static int getR() {
    Random r = new Random();
    int rint = r.nextInt(8);
    return rint;
}
Run Code Online (Sandbox Code Playgroud)

我的意思是,它们看起来像素化且不清晰。

Bla*_*elt 5

使用inSampleSize来缩放Bitmap。从文档

如果设置为 > 1 的值,则请求解码器对原始图像进行二次采样,返回较小的图像以节省内存。样本大小是对应于解码位图中单个像素的任一维度中的像素数。例如,inSampleSize == 4 返回一个图像,其宽度/高度是原始图像的 1/4,像素数是 1/16。任何 <= 1 的值都被视为与 1 相同。 注意:解码器使用基于 2 的幂的最终值,任何其他值将向下舍入到最接近的 2 的幂。

例如:

 BitmapFactory.Options opts = new BitmapFactory.Options();
 opt.inSampleSize = 4;
 Bitmap newBitmap = BitmapFactory.decodeFile(filePath, opts);
Run Code Online (Sandbox Code Playgroud)