2013-02-25 88 views
10

我有一个加载的位图,我想将其转换为将配置设置为Bitmap.Config.RGB_565。在位图已经加载到内存后,是否有一种将Bitmap转换为此配置的简单方法?例如,下面我有一个位图从应用程序资源解码,但是,如何将已加载的Bitmap转换为RGB_565?我相信这很简单,但是,我对Bitmaps的工作还很陌生,在网上查了几个小时后,很遗憾,我找不到我需要的东西。使用Bitmap.Config.RGB_565将内存中的位图转换为位图

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

回答

21

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

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

调用方法是这样的:

Bitmap convertedBitmap = convert(bitmap, Bitmap.Config.RGB_565); 

你可以做各种额外的转换一样旋转,拉伸等,如果你使用drawBitmap和Matrix。

13

你也可以试试这个:

Bitmap converted = original.copy(Config.RGB_565, false); 

从Bitmap.copy()的documentation

试图使基于该位图的尺寸新位图,设置新位图的配置为指定的配置,然后将该位图的像素复制到新的位图中。如果转换不受支持,或分配器失败,则返回NULL。

翻翻本地源代码,你应该很好地转换Bitmap.Config的任何值。