Android中Bitmap和Drawable

一、相關概念

1、Drawable就是一個可畫的對象,其可能是一張位圖(BitmapDrawable),也可能是一個圖形(ShapeDrawable),還有可能是一個圖層(LayerDrawable),我們根據畫圖的需求,創建相應的可畫對象
2、Canvas畫布,繪圖的目的區域,用於繪圖
3、Bitmap位圖,用於圖的處理
4、Matrix矩陣

二、Bitmap

1、從資源中獲取Bitmap

Java代碼  收藏代碼

1.              Resources res = getResources();  

2.              Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon);  

 

2Bitmap byte[]

Java代碼  收藏代碼

1.              public byte[] Bitmap2Bytes(Bitmap bm) {  

2.                  ByteArrayOutputStream baos = new ByteArrayOutputStream();  

3.                  bm.compress(Bitmap.CompressFormat.PNG, 100, baos);  

4.                  return baos.toByteArray();  

5.              }  

 3byte[] Bitmap

Java代碼  收藏代碼

1.              public Bitmap Bytes2Bimap(byte[] b) {  

2.                  if (b.length != 0) {  

3.                      return BitmapFactory.decodeByteArray(b, 0, b.length);  

4.                  } else {  

5.                      return null;  

6.                  }  

7.              }  

4Bitmap縮放

Java代碼  收藏代碼

1.              public static Bitmap zoomBitmap(Bitmap bitmap, int width, int height) {  

2.                  int w = bitmap.getWidth();  

3.                  int h = bitmap.getHeight();  

4.                  Matrix matrix = new Matrix();  

5.                  float scaleWidth = ((float) width / w);  

6.                  float scaleHeight = ((float) height / h);  

7.                  matrix.postScale(scaleWidth, scaleHeight);  

8.                  Bitmap newbmp = Bitmap.createBitmap(bitmap, 00, w, h, matrix, true);  

9.                  return newbmp;  

10.            }  

  5、將Drawable轉化爲Bitmap

Java代碼  收藏代碼

1.              public static Bitmap drawableToBitmap(Drawable drawable) {  

2.                      //  drawable 的長寬  

3.                      int w = drawable.getIntrinsicWidth();  

4.                      int h = drawable.getIntrinsicHeight();  

5.                

6.                      //  drawable 的顏色格式  

7.                      Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888  

8.                              : Bitmap.Config.RGB_565;  

9.                      // 建立對應 bitmap  

10.                    Bitmap bitmap = Bitmap.createBitmap(w, h, config);  

11.                    // 建立對應 bitmap 的畫布  

12.                    Canvas canvas = new Canvas(bitmap);  

13.                    drawable.setBounds(00, w, h);  

14.                    //  drawable 內容畫到畫布中  

15.                    drawable.draw(canvas);  

16.                    return bitmap;  

17.                }  

6、獲得圓角圖片 

Java代碼  收藏代碼

1.              public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {  

2.                  int w = bitmap.getWidth();  

3.                  int h = bitmap.getHeight();  

4.                  Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);  

5.                  Canvas canvas = new Canvas(output);  

6.                  final int color = 0xff424242;  

7.                  final Paint paint = new Paint();  

8.                  final Rect rect = new Rect(00, w, h);  

9.                  final RectF rectF = new RectF(rect);  

10.                paint.setAntiAlias(true);  

11.                canvas.drawARGB(0000);  

12.                paint.setColor(color);  

13.                canvas.drawRoundRect(rectF, roundPx, roundPx, paint);  

14.                paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));  

15.                canvas.drawBitmap(bitmap, rect, rect, paint);  

16.              

17.                return output;  

18.            }  

 7、獲得帶倒影的圖片

Java代碼  收藏代碼

1.              public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {  

2.                  final int reflectionGap = 4;  

3.                  int w = bitmap.getWidth();  

4.                  int h = bitmap.getHeight();  

5.                

6.                  Matrix matrix = new Matrix();  

7.                  matrix.preScale(1, -1);  

8.                

9.                  Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, h / 2, w,  

10.                        h / 2, matrix, false);  

11.              

12.                Bitmap bitmapWithReflection = Bitmap.createBitmap(w, (h + h / 2),  

13.                        Config.ARGB_8888);  

14.              

15.                Canvas canvas = new Canvas(bitmapWithReflection);  

16.                canvas.drawBitmap(bitmap, 00null);  

17.                Paint deafalutPaint = new Paint();  

18.                canvas.drawRect(0, h, w, h + reflectionGap, deafalutPaint);  

19.              

20.                canvas.drawBitmap(reflectionImage, 0, h + reflectionGap, null);  

21.              

22.                Paint paint = new Paint();  

23.                LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,  

24.                        bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff,  

25.                        0x00ffffff, TileMode.CLAMP);  

26.                paint.setShader(shader);  

27.                // Set the Transfer mode to be porter duff and destination in  

28.                paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));  

29.                // Draw a rectangle using the paint with our linear gradient  

30.                canvas.drawRect(0, h, w, bitmapWithReflection.getHeight()  

31.                        + reflectionGap, paint);  

32.              

33.                return bitmapWithReflection;  

34.            }  

 三、Drawable

1Bitmap轉換成Drawable

Java代碼  收藏代碼

1.              Bitmap bm=xxx; //xxx根據你的情況獲取  

2.              BitmapDrawable bd= new BitmapDrawable(getResource(), bm);   

3.              因爲BtimapDrawableDrawable的子類,最終直接使用bd對象即可。  

2Drawable縮放

Java代碼  收藏代碼

1.              public static Drawable zoomDrawable(Drawable drawable, int w, int h) {  

2.                  int width = drawable.getIntrinsicWidth();  

3.                  int height = drawable.getIntrinsicHeight();  

4.                  // drawable轉換成bitmap  

5.                  Bitmap oldbmp = drawableToBitmap(drawable);  

6.                  // 創建操作圖片用的Matrix對象  

7.                  Matrix matrix = new Matrix();  

8.                  // 計算縮放比例  

9.                  float sx = ((float) w / width);  

10.                float sy = ((float) h / height);  

11.                // 設置縮放比例  

12.                matrix.postScale(sx, sy);  

13.                // 建立新的bitmap,其內容是對原bitmap的縮放後的圖  

14.                Bitmap newbmp = Bitmap.createBitmap(oldbmp, 00, width, height,  

15.                        matrix, true);  

16.                return new BitmapDrawable(newbmp);  

17.            }  

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章