android 图片

1,setCompoundDrawables(Drawable left, Drawable top,Drawable right, Drawable bottom)

  设置图片出现在textView,button,editText的各个方向.其中,left是drawable类型的.

2.如何获取上面的drawable

  Drawable drawable = getResources().getDrawable(R.drawable.username);

  drawable.setBounds(5,1,60,50);

  设置drawable的坐标为5,1,宽和高为:60和50

3.

手动设置文本与图片相对位置时,常用到如下方法:

setCompoundDrawables(left, top, right, bottom)

setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom)

意思是设置Drawable显示在text的左、上、右、下位置。

但是两者有些区别:
setCompoundDrawables 画的drawable的宽高是按drawable.setBound()设置的宽高,
所以才有The Drawables must already have had setBounds(Rect) called.

使用之前必须使用Drawable.setBounds设置Drawable的长宽。

setCompoundDrawablesWithIntrinsicBounds是画的drawable的宽高是按drawable固定的宽高,
所以才有The Drawables‘ bounds will be set to their intrinsic bounds.

即通过getIntrinsicWidth()与getIntrinsicHeight()获得,

4.

1、Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象
2、Canvas画布,绘图的目的区域,用于绘图
3、Bitmap位图,用于图的处理
4、Matrix矩阵

1、从资源中获取Bitmap

    1. Resources res = getResources();  

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

 

2、Bitmap → byte[]

public byte[] Bitmap2Bytes(Bitmap bm) {  

 ByteArrayOutputStream baos = new ByteArrayOutputStream();  

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

return baos.toByteArray();  

}  

 

 

     public Bitmap Bytes2Bimap(byte[] b) {  

      if (b.length != 0) {  

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

     } else {  

          return null;  

     }  

     }  

 

     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;  

     }  

  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;  

        // 建立对应 bitmap  

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

          // 建立对应 bitmap 的画布  

             Canvas canvas = new Canvas(bitmap);  

           drawable.setBounds(0, 0, w, h);  

           // 把 drawable 内容画到画布中  

           drawable.draw(canvas);  

           return bitmap;  

       }  

获得圆角图片 

 

     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;  

    }  

 

 

 

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转换成bitmap  

         Bitmap 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);  

     }

时间: 2024-11-09 16:13:57

android 图片的相关文章

Android图片色彩处理ColorMatrix

Android图片的处理一般是将图片转成位图(Bitmap)来的处理,位图包含着一张图片的所有数据.图片实际上是由很多个单一颜色的点阵组成的,这些点越小图片就越细腻,点的颜色是由色值ARGB,即透明度.红.绿.蓝四个分量决定.而整张图片的处理实际上就是对这些点的分量做调整. Android系统中提供一个用于调整颜色的矩阵ColorMatrix,这是一个4x5的数字矩阵.而颜色的色值则保存在一个4x1的矩阵中.色值的区间为[0,255].以下是ColorMatrix部分注解 /** * 4x5 m

24.Android 图片工具ImageUtil

24.Android 图片工具ImageUtil Android 图片工具ImageUtil 裁图 Bitmap圆角 缩略图 视频缩略图 各种类型转换 ImageUtil全部源码 裁图 /** * 调用系统自带裁图工具 * * @param activity * @param size * @param uri * @param action * @param cropFile */ public static void cropPicture(Activity activity, int si

android图片压缩的3种方法实例

android 图片压缩方法: 第一:质量压缩法: private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream();        image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中        int options = 100

Android图片压缩(质量压缩和尺寸压缩)

在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩):质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手机拍照都能达到3M左右了,尺寸压缩一般可用于生成缩略图.两种方法都实装在了我的项目中,结果却发现在质量压缩的模块中,本来1.9M的图片压缩后反而变成3M多了,很是奇怪,再做了进一步调查终于知道原因了.下面这个博客说的比较清晰: android图片压缩总结 总结来看,图片有三种存在形式:硬盘上时是fi

Android图片异步加载之Android-Universal-Image-Loader

将近一个月没有更新博客了,由于这段时间以来准备毕业论文等各种事务缠身,一直没有时间和精力沉下来继续学习和整理一些东西.最近刚刚恢复到正轨,正好这两天看了下Android上关于图片异步加载的开源项目,就顺便整理记录下来,作为这一个多月来博客的重新开火做饭吧.从今天起我会陆续恢复博客的更新,也希望大家继续支持. 今天要介绍的是Github上一个使用非常广泛的图片异步加载库Android-Universal-Image-Loader,该项目的功能十分强大,可以说是我见过的目前功能最全.性能最优的图片异

Android图片异步加载之Android-Universal-Image-Loader类库的使用

Android开发中我们会经常遇到图片过多或操作不当造成Out of Memory异常,有时虽然是解决了这个问题但却会影响程序的运行效率,例如:当用户在快速滑动滚动条的过程中,我们程序在仍在艰难的加载服务器端的图片,这样给用户造成了极不好的体验.其实网络上关于图片的异步加载和缓存的讲解很多,但是其实,写一个这方面的程序还是比较麻烦的,要考虑多线程,缓存,内存溢出等很多方面,针对这一广大开发者都会遇到的问题,一些牛人们已经帮我们解决了这一问题,今天我为大家介绍一款很流行的开源类库,可以很很好的解决

[Android] 图片JNI(C++\Java)高斯模糊 多线程

在我的博客中,曾经发布了一篇高斯模糊(堆栈模糊)的文章:在其中使用了国外的一个堆栈模糊来实现对图片的模糊处理:同时弄了一个JNI C++ 的版本. 这篇文章依然是堆栈模糊:可以说最原始的地方还是堆栈模糊部分:只不过是支持多线程的. 纳尼??感情是之前那个不支持多线程?Sorry,我说错了:两个都是支持多线程调用的.不过新讲的这个是能在内部采用多线程进行分段模糊. 原来的:[Android]-图片JNI(C++\Java)高斯模糊的实现与比较 开工吧 说明:其中代码大部分来源于网络,不过都是开源的

Android图片压缩技巧

请尊重他人的劳动成果,转载请注明出处:Android图片压缩技巧 http://blog.csdn.net/fengyuzhengfan/article/details/41759835 当需要将Android客户端的图片上传到服务器时,往往需要将图片进行压缩,关于图片的压缩方法,小编分享几种常用的方式: 第一种方式:裁切以达到压缩的目的 我曾在<Android开发之裁剪照片>一文中详细介绍过如何裁切照片,感兴趣的朋友可以去看一下. 第二种方式:将图片进行降质处理(即降低图片的质量)以达到压缩

【转】一、android图片特效处理之模糊效果

这篇将讲到图片特效处理的模糊效果.跟前面一样是对像素点进行处理,算法是通用的,但耗时会更长,至于为什么,看了下面的代码你就会明白. 算法: 一.简单算法:将像素点周围八个点包括自身一共九个点的RGB值分别相加后平均,作为当前像素点的RGB值,即可实现效果. 举例: ABC DEF GHI 假如当前点是E,那么会有: E.r = (A.r + B.r + C.r + D.r + E.r + F.r + G.r + H.r + I.r) / 9 // r表示的是E像素点RGB值的R值 E像素点的GB

毕加索的艺术——Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选

毕加索的艺术--Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选 官网: http://square.github.io/picasso/ 我们在上篇OkHttp的时候说过这个Picasso,学名毕加索,是Square公司开源的一个Android图形缓存库,而且使用起来也是非常的简单,只要一行代码就轻松搞定了,你会问,为什么不介绍一下Glide?其实Glide我有时间也是会介绍的,刚好上篇我们用到了Picasso,