2

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

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

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

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;
}

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

4

3 回答 3

5

用于inSampleSize缩放 a 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);
于 2013-07-17T10:17:02.267 回答
3

您可以制作图像缩略图:

Bitmap thumbBitmap = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(filePath), thumbWidth, thumbHeight);
于 2013-07-17T10:15:53.810 回答
1

使用您的代码,如果您想根据每个设置的文档提高质量,您应该:

  1. Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);:每个像素存储在 4 个字节上。每个通道(用于半透明的 RGB 和 alpha)都以 8 位精度(256 个可能的值)存储。这种配置非常灵活并提供最佳质量。应尽可能使用它。

  2. paint.setAntiAlias(true);:AntiAliasing 平滑正在绘制的边缘

  3. paint.setFilterBitmap(true);: 过滤会影响位图在变换时的采样。

于 2013-07-17T10:26:00.063 回答