Android中自定义View的研究(三) -- 获得Bitmap的三种方法
本文转自:http://lovewf.blog.51cto.com/1723922/724114
是不是开始摩拳擦掌了,哈哈,有感觉了吧,有感觉了就加油,开始下一步学习,一步一步始终会学到东西,这章不解释,下面有完整注释
用BitmapFactory解析图片
// --> 使用BitmapFactory解析图片 public void myUseBitmapFactory(Canvas canvas){ // 定义画笔 Paint paint = new Paint(); // 获取资源流 Resources rec = getResources(); InputStream in = rec.openRawResource(R.drawable.haha); // 设置图片 Bitmap bitmap =BitmapFactory.decodeStream(in); System.out.println("---w---"+w); System.out.println("---h---"+h);
System.out.println("--- --------------- ---"); // 绘制图片 canvas.drawBitmap(bitmap, 0,20, paint); }
用BitmapDrawable解析图片
// --> 使用BitmapDrawable解析图片 public void myUseBitmapDrawable(Canvas canvas){ // 定义画笔 Paint paint = new Paint(); // 获得资源 Resources rec = getResources(); // BitmapDrawable BitmapDrawable bitmapDrawable = (BitmapDrawable) rec.getDrawable(R.drawable.haha); // 得到Bitmap Bitmap bitmap = bitmapDrawable.getBitmap(); System.out.println("---w---"+w); System.out.println("---h---"+h); System.out.println("--- --------------- ---"); // 在画板上绘制图片 canvas.drawBitmap(bitmap, 20,120,paint); }
用InputStream和BitmapDrawable绘制
// --> 使用InputStream和BitmapDrawable解析图片 public void myUseInputStreamandBitmapDrawable(Canvas canvas){ // 定义画笔 Paint paint = new Paint(); // 获得资源 Resources rec = getResources(); // InputStream得到资源流 InputStream in = rec.openRawResource(R.drawable.haha); // BitmapDrawable 解析数据流 BitmapDrawable bitmapDrawable = new BitmapDrawable(in); // 得到图片 Bitmap bitmap = bitmapDrawable.getBitmap(); System.out.println("---w---"+w); System.out.println("---h---"+h); System.out.println("--- --------------- ---"); // 绘制图片 canvas.drawBitmap(bitmap, 100, 100,paint); }
个人发现:
发现其中代码myUseBitmapDrawable(Canvas canvas)中,
BitmapDrawable bitmapDrawable = (BitmapDrawable)res.getDrawable(R.drawable.haha);
其中数据类型转换,导致图片的宽度和高度发生了变化,原来的图片高度为250,宽度为:180
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端