Android中BitMap和Drawable.docx_第1页
Android中BitMap和Drawable.docx_第2页
Android中BitMap和Drawable.docx_第3页
Android中BitMap和Drawable.docx_第4页
Android中BitMap和Drawable.docx_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android中Bitmap和Drawable一、相关概念1、Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象2、Canvas画布,绘图的目的区域,用于绘图3、Bitmap位图,用于图的处理4、Matrix矩阵二、Bitmap1、从资源中获取BitmapJava代码 1. Resources res = getResources(); 2. Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon); Resources res = getResources();Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon);2、Bitmap byteJava代码 1. public byte Bitmap2Bytes(Bitmap bm) 2. ByteArrayOutputStream baos = new ByteArrayOutputStream(); 3. press(Bitmap.CompressFormat.PNG, 100, baos); 4. return baos.toByteArray(); 5. public byte Bitmap2Bytes(Bitmap bm) ByteArrayOutputStream baos = new ByteArrayOutputStream();press(Bitmap.CompressFormat.PNG, 100, baos);return baos.toByteArray();3、byte 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. public Bitmap Bytes2Bimap(byte b) if (b.length != 0) return BitmapFactory.decodeByteArray(b, 0, b.length); else return null;4、Bitmap缩放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, 0, 0, w, h, matrix, true); 9. return newbmp; 10. public static Bitmap zoomBitmap(Bitmap bitmap, int width, int height) int w = bitmap.getWidth();int h = bitmap.getHeight();Matrix matrix = new Matrix();float scaleWidth = (float) width / w);float scaleHeight = (float) height / h);matrix.postScale(scaleWidth, scaleHeight);Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);return newbmp;5、将Drawable转化为BitmapJava代码 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(0, 0, w, h); 14. / 把 drawable 内容画到画布中 15. drawable.draw(canvas); 16. return bitmap; 17. public static Bitmap drawableToBitmap(Drawable drawable) / 取 drawable 的长宽int w = drawable.getIntrinsicWidth();int h = drawable.getIntrinsicHeight();/ 取 drawable 的颜色格式Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565;/ 建立对应 bitmapBitmap bitmap = Bitmap.createBitmap(w, h, config);/ 建立对应 bitmap 的画布Canvas canvas = new Canvas(bitmap);drawable.setBounds(0, 0, w, h);/ 把 drawable 内容画到画布中drawable.draw(canvas);return bitmap;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(0, 0, w, h); 9. final RectF rectF = new RectF(rect); 10. paint.setAntiAlias(true); 11. canvas.drawARGB(0, 0, 0, 0); 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. public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) int w = bitmap.getWidth();int h = bitmap.getHeight();Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);Canvas canvas = new Canvas(output);final int color = 0xff424242;final Paint paint = new Paint();final Rect rect = new Rect(0, 0, w, h);final RectF rectF = new RectF(rect);paint.setAntiAlias(true);canvas.drawARGB(0, 0, 0, 0);paint.setColor(color);canvas.drawRoundRect(rectF, roundPx, roundPx, paint);paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN);canvas.drawBitmap(bitmap, rect, rect, paint);return output;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, 0, 0, null); 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. public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) final int reflectionGap = 4;int w = bitmap.getWidth();int h = bitmap.getHeight();Matrix matrix = new Matrix();matrix.preScale(1, -1);Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, h / 2, w,h / 2, matrix, false);Bitmap bitmapWithReflection = Bitmap.createBitmap(w, (h + h / 2),Config.ARGB_8888);Canvas canvas = new Canvas(bitmapWithReflection);canvas.drawBitmap(bitmap, 0, 0, null);Paint deafalutPaint = new Paint();canvas.drawRect(0, h, w, h + reflectionGap, deafalutPaint);canvas.drawBitmap(reflectionImage, 0, h + reflectionGap, null);Paint paint = new Paint();LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff,0x00ffffff, TileMode.CLAMP);paint.setShader(shader);/ Set the Transfer mode to be porter duff and destination inpaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN);/ Draw a rectangle using the paint with our linear gradientcanvas.drawRect(0, h, w, bitmapWithReflection.getHeight()+ reflectionGap, paint);return bitmapWithReflection;三、Drawable1、Bitmap转换成DrawableJava代码 1. Bitmap bm=xxx; /xxx根据你的情况获取 2. BitmapDrawable bd= new BitmapDrawable(getResource(), bm); 3. 因为BtimapDrawable是Drawa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论