public void saveMyBitmap(String bitName, Bitmap mBitmap) {File f = new File("/sdcard/" + bitName + ".png");try {f.createNewFile();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}FileOutputStream fOut = null;try {fOut = new FileOutputStream(f);} catch (FileNotFoundException e) {e.printStackTrace();}mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);try {fOut.flush();} catch (IOException e) {e.printStackTrace();}try {fOut.close();} catch (IOException e) {e.printStackTrace();}}

一,相关概念

1,Bitmap,位图也就是位的数组,扩展名为.bmp的不带压缩的点阵图,也就是一种图片信息存储对象。

2,Drawable,就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象。实际上它是android平台的通用对象,用来装载png,jpg,gif,bmp等各种常见的图片资源。

3,Canvas,绘图的目的区域,任何要展现的形状或效果都需要它作为背景。可以通过它来对bitmap进行裁剪转化等操作。一般draw这个动作由canvas发起:canvas.drawCircle

4,Paint,画笔,设置颜色抗锯齿什么的。

二,Bitmap

1,从资源中获取bitmap

Resources res = getResources();Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.ic_launcher);

2,bitmap -> byte[]

public byte[] BitmapToBytes(Bitmap bitmap) {<span style="white-space:pre"></span>ByteArrayOutputStream mByteArrayOutputStream= new ByteArrayOutputStream();<span style="white-space:pre"></span>bitmap.compress(Bitmap.CompressFormat.PNG, 100, mByteArrayOutputStream);<span style="white-space:pre"></span>return mByteArrayOutputStream.toByteArray();<span style="white-space:pre"></span>}

3,byte[] -> bitmap

public Bitmap BytesToBimap(byte[] b) {if (b.length != 0) {return BitmapFactory.decodeByteArray(b, 0, b.length);} else {return null;}}

4,bitmap缩放

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 -> bitmap

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,获得圆角图片

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,获得带倒影图片

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;}
public static Bitmap createReflectedImage(Bitmap originalImage) {        int width = originalImage.getWidth();        int height = originalImage.getHeight();        Matrix matrix = new Matrix();        matrix.preScale(1, -1);                Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, 0, width,        height, matrix, false);                final Canvas canvas = sCanvas;        canvas.setBitmap(reflectionImage);Paint shaderPaint = new Paint();LinearGradient shader = new LinearGradient(0, 0, 0, height, 0x70ffffff,0x00ffffff, TileMode.MIRROR);shaderPaint.setShader(shader);shaderPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));canvas.drawRect(0, 0, width, height, shaderPaint);canvas.setBitmap(null);        return reflectionImage;    }


8.Bitmap存入SD


三,Drawable

1,bitmap -> drawable

Bitmap bm=xxx; //xxx根据你的情况获取BitmapDrawable bd= new BitmapDrawable(getResource(), bm); 因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。

2,drawable缩放

public static Drawable zoomDrawable(Drawable drawable, int w, int h) {int width = drawable.getIntrinsicWidth();int height = drawable.getIntrinsicHeight();// drawable转换成bitmapBitmap oldbmp = drawableToBitmap(drawable);// 创建操作图片用的Matrix对象Matrix matrix = new Matrix();// 计算缩放比例float sx = ((float) w / width);float sy = ((float) h / height);// 设置缩放比例matrix.postScale(sx, sy);// 建立新的bitmap,其内容是对原bitmap的缩放后的图Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height,matrix, true);return new BitmapDrawable(newbmp);}

canvas.translate(.1f * drawableNormal.getIntrinsicWidth() / 2, .1f * drawableNormal.getIntrinsicHeight() / 2);canvas.scale(.9f, .9f);drawableNormal.draw(canvas);//缩放时要连带作translate


更多相关文章

  1. Android积木之图片的生成和保存
  2. IDEA和Android Studio设置自定义背景图片
  3. android图片压缩工具类分享
  4. 『ANDROID』Android实现圆形的图片边角
  5. PC客户端与Android实现图片传送
  6. android_常用UI控件_02_EditText_01添加图片到edittext中
  7. Android 图片点击 全屏缩放预览
  8. Android富文本图文混排、粗体、斜体、图片、下划线、删除线等

随机推荐

  1. [置顶] Android API Guides – Introduct
  2. Android DatePickerDialog 只显示年月
  3. Android中Handler源码解析(一)
  4. Android Auido(2)- AudioTrack to AudioF
  5. android 开机启动程序
  6. Android(安卓)4.0.1_r1源代码发布,更新获
  7. Android全屏(包含3种隐藏顶部状态栏及标题
  8. Android - Android Studio 安装 及 设置
  9. 6.1.5 GridView详解编辑
  10. Android图表应用分享