使用Bitmap.Config.RGB_565将内存中的位图转换为位图

Eut*_*hro 16 rgb android bitmap bitmapfactory

我有一个加载的位图,我想转换为将配置设置为Bitmap.Config.RGB_565.Bitmap在Bitmap已经加载到内存后,是否有一种简单的方法将a 转换为此配置?例如,下面我有一个从应用程序资源解码的位图,但是,我如何将已经加载的转换BitmapRGB_565?我确定这很简单,但是,我对使用Bitmaps很新,经过几个小时的在线查看,遗憾的是我无法找到我需要的东西.

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig=Bitmap.Config.RGB_565
bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.myphoto ,options);
Run Code Online (Sandbox Code Playgroud)

Ema*_*lin 27

我没有测试过,但它应该工作:

private Bitmap convert(Bitmap bitmap, Bitmap.Config config) {
    Bitmap convertedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), config);
    Canvas canvas = new Canvas(convertedBitmap);
    Paint paint = new Paint();
    paint.setColor(Color.BLACK);
    canvas.drawBitmap(bitmap, 0, 0, paint);
    return convertedBitmap;
}
Run Code Online (Sandbox Code Playgroud)

调用这样的方法:

Bitmap convertedBitmap = convert(bitmap, Bitmap.Config.RGB_565);
Run Code Online (Sandbox Code Playgroud)

如果将drawBitmap与Matrix一起使用,则可以执行各种其他转换,如旋转,拉伸等.


sa.*_*dow 22

你也可以试试这个:

Bitmap converted = original.copy(Config.RGB_565, false);
Run Code Online (Sandbox Code Playgroud)

从Bitmap.copy()的文档:

尝试根据此位图的尺寸制作新的位图,将新位图的配置设置为指定的位图,然后将此位图的像素复制到新位图中.如果不支持转换,或者分配器失败,则返回NULL.

查看本机源代码,您应该在Bitmap.Config的任何值之间进行良好的转换.

  • 如果您想保留透明度,请务必使用 Config.ARGB_8888 (3认同)