從名字中可以看出:
ALPHA_8: 一種透明度為8位的位圖.
ARGB_4444: A,R,G,B,每一個參數由4bit表示,是一種16位的位圖.
ARGB_8888: A,R,G,B,每一個參數由8bit來表示,是一種32位的位圖.
Bitmap newBitmap = Bitmap. createBitmap( imgMapWidth,imgMapHeight , Bitmap.Config.RGB_565 );
android中可以通過以上的方式來創建一BMP格式的位圖,只是圖片的寬和高的值太大時,會使android的VM產生內存溢出的Exception,解決的方法之一,在生成該對象時,通過設置Bitmap.Config,來壓縮該位圖在生成時的大小。從上面的4個屬性值看來,壓縮的最大值可以達到2^8。
//在指定的位圖上添加圖標 private Bitmap addMarkToImageMap(int x, int y){ //創建一個和原圖同樣大小的位圖 //Bitmap newBitmap = Bitmap.createBitmap(imgMapWidth,imgMapHeight, Bitmap.Config.RGB_565); Bitmap newBitmap = imageMap; if(!newBitmap.isMutable()){ newBitmap = imageMap.copy(Bitmap.Config.RGB_565, true); } Canvas canvas = new Canvas(newBitmap); canvas.drawBitmap( markImg, x, y, paint );//插入圖標 canvas.save(Canvas. ALL_SAVE_FLAG); //存儲新合成的圖片 canvas.restore(); return newBitmap; }
順便延伸一下,在圖片上寫字的例子就出來了:
/** * 圖片上畫字 * */ private Bitmap drawTextAtBitmap(Bitmap bitmap,String text){ int x = bitmap.getWidth(); int y = bitmap.getHeight(); // 創建一個和原圖同樣大小的位圖 Bitmap newbit = Bitmap.createBitmap(x, y, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(newbit); Paint paint = new Paint(); // 在原始位置0,0插入原圖 canvas.drawBitmap(bitmap, 0, 0, paint); paint.setColor(Color.parseColor("#dedbde")); paint.setTextSize(20); // 在原圖指定位置寫上字 canvas.drawText(text, 53 , 30, paint); canvas.save(Canvas.ALL_SAVE_FLAG); // 存儲 canvas.restore(); return newbit; }
二、
大家可能知道Bitmap的疊加處理在Android平台中可以通過Canvas一層一層的畫就行了,而Drawable中如何處理呢?
除了使用BitmapDrawable的getBitmap方法將Drawable轉換為Bitmap外,
今天給大家說下好用簡單的 LayerDrawable類,LayerDrawable顧名思義就是層圖形對象。
下面直接用一個簡單的代碼表示:
Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.cwj);
Drawable[] array = new Drawable[3];
array[0] = new PaintDrawable(Color.BLACK); //黑色
array[1] = new PaintDrawable(Color.WHITE); //白色
array[2] = new BitmapDrawable(bm); //位圖資源
LayerDrawable ld = new LayerDrawable(array); //參數為上面的Drawable數組
ld.setLayerInset(1, 1, 1, 1, 1); //第一個參數1代表數組的第二個元素,為白色
ld.setLayerInset(2, 2, 2, 2, 2); //第一個參數2代表數組的第三個元素,為位圖資源
mImageView.setImageDrawable(ld);
上面的方法中LayerDrawable是關鍵,Android開發網提示setLayerInset方法原型為
public void setLayerInset (int index, int l, int t, int r, int b) 其中第一個參數為層的索引號,
后面的四個參數分別為left、top、right和bottom。對於簡單的圖片合成我們可以將第一和第二層的
PaintDrawable換成BitmapDrawable即可實現簡單的圖片合成。
附:Android實戰經驗之圖像處理及特效處理的集錦(總結版)
6 android圖像處理系列之三--圖片色調飽和度、色相、亮度處理
9 android圖像處理系列之六--給圖片添加邊框(下)-圖片疊加
from:http://blog.csdn.net/sjf0115/article/details/7338544