随笔 - 383  文章 - 0  评论 - 0  阅读 - 35557 

 

 

一、  相关概念

1.        Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象

2.        Canvas画布,绘制的目的区域,用于绘图

3.        Bitmap位图,用于图的处理

4.        Matrix矩阵,此例中用于操作图片

二、  步骤

1.        drawable画到位图对象上

2.        对位图对象做缩放(或旋转等)操作

3.        把位图再转换成drawable

三、 示例
         static Bitmap drawableToBitmap(Drawable drawable) // drawable 转换成bitmap
         {
                   int width = drawable.getIntrinsicWidth();  
//
drawable的长宽
                   int height = drawable.getIntrinsicHeight();
                 Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888:Bitmap.Config.RGB_565;        
// drawable的颜色格式
                   Bitmap bitmap = Bitmap.createBitmap(width, height, config);    
// 建立对应bitmap
                   Canvas canvas = new Canvas(bitmap);        
//
建立对应bitmap的画布
                   drawable.setBounds(0, 0, width, height);
                   drawable.draw(canvas);     
// drawable内容画到画布中
                   return bitmap;
         }

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

posted on   xieyan0811  阅读(60)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示