位置: 编程技术 - 正文

Android Bitmap总结(android/bitmap.h)

编辑:rootadmin

推荐整理分享Android Bitmap总结(android/bitmap.h),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android bitmap recycle,android bitmap recycle,android中bitmap,android bitmapdrawable,android inbitmap,android bitmapdrawable,android/bitmap.h,android bitmapfactory,内容如对您有帮助,希望把文章链接给更多的朋友!

BitMap类: public void recycle()——回收位图占用的内存空间,把位图标记为Dead public final boolean isRecycled() ——判断位图内存是否已释放 public final int getWidth()——获取位图的宽度 public final int getHeight()——获取位图的高度 public final boolean isMutable()——图片是否可修改 public int getScaledWidth(Canvas canvas)——获取指定密度转换后的图像的宽度 public int getScaledHeight(Canvas canvas)——获取指定密度转换后的图像的高度 public boolean compress(CompressFormat format, int quality, OutputStream stream)——按指定的图片格式以及画质,将图片转换为输出流。 format:Bitmap.CompressFormat.PNG或Bitmap.CompressFormat.JPEG quality:画质,0-.0表示最低画质压缩,以最高画质压缩。对于PNG等无损格式的图片,会忽略此项设置。

常用的静态方法: public static Bitmap createBitmap(Bitmap src) ——以src为原图生成不可变得新图像 public static Bitmap createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter)——以src为原图,创建新的图像,指定新图像的高宽以及是否可变。 public static Bitmap createBitmap(int width, int height, Config config)——创建指定格式、大小的位图 public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height)以source为原图,创建新的图片,指定起始坐标以及新图像的高宽。 public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)

BitmapFactory工厂类: Option 参数类: public boolean inJustDecodeBounds——如果设置为true,不获取图片,不分配内存,但会返回图片的高度宽度信息。 public int inSampleSize——图片缩放的倍数。如果设为4,则宽和高都为原来的1/4,则图是原来的1/。 public int outWidth——获取图片的宽度值 public int outHeight——获取图片的高度值 —————————————————————————————— public int inDensity——用于位图的像素压缩比 public int inTargetDensity——用于目标位图的像素压缩比(要生成的位图) public boolean inScaled——设置为true时进行图片压缩,从inDensity到inTargetDensity。

读取一个文件路径得到一个位图。如果指定文件为空或者不能解码成文件,则返回NULL。 public static Bitmap decodeFile(String pathName, Options opts) public static Bitmap decodeFile(String pathName) 读取一个资源文件得到一个位图。如果位图数据不能被解码,或者opts参数只请求大小信息时,则返回NuLL。 (即当Options.inJustDecodeBounds=true,只请求图片的大小信息。) public static Bitmap decodeResource(Resources res, int id) public static Bitmap decodeResource(Resources res, int id, Options opts) 从输入流中解码位图 public static Bitmap decodeStream(InputStream is) 从字节数组中解码生成不可变的位图 public static Bitmap decodeByteArray(byte[] data, int offset, int length)

BitmapDrawable类:继承于Drawable,你可以从文件路径、输入流、XML文件以及Bitmap中创建。 常用的构造函数: Resources res=getResources();//获取资源 public BitmapDrawable(Resources res)——创建一个空的drawable。(Response用来指定初始时所用的像素密度)替代public BitmapDrawable()方法(此方法不处理像素密度) public BitmapDrawable(Resources res, Bitmap bitmap)——Create drawable from a bitmap public BitmapDrawable(Resources res, String filepath)——Create a drawable by opening a given file path and decoding the bitmap. public BitmapDrawable(Resources res, java.io.InputStream is)——Create a drawable by decoding a bitmap from the given input stream.

转: 首先介绍我们最常用的Bitmap(位图)。位图是我们开发中最常用的资源,毕竟一个漂亮的界面对用户是最有吸引力的。按照对位图的操作,分为以下几个功能分别介绍: 从资源中获取位图 获取位图的信息 显示位图 位图缩放 位图旋转 1. 从资源中获取位图 可以使用BitmapDrawable或者BitmapFactory来获取资源中的位图。 当然,首先需要获取资源: Resources res=getResources(); 使用BitmapDrawable获取位图 1. 使用BitmapDrawable (InputStream is)构造一个BitmapDrawable; 2. 使用BitmapDrawable类的getBitmap()获取得到位图; 通过Resource的函数:InputStream openRawResource(int id)获取得到资源文件的数据流后,也可以通过2种方法来获取Bitmap,如下: 使用BitmapDrawable (A Drawable that wraps a bitmap and can be tiled, stretched, or aligned.) 使用BitmapDrawable (InputStream is)构造一个BitmapDrawable; 使用BitmapDrawable类的getBitmap()获取得到位图; BitmapDrawable也提供了显示位图等操作。 Java代码: InputStream is=res.openRawResource(R.drawable.pic); // 读取资源文件获取输入流 BitmapDrawable bmpDraw=new BitmapDrawable(is); Bitmap bmp=bmpDraw.getBitmap(); 或者: BitmapDrawable bmpDraw=(BitmapDrawable)res.getDrawable(R.drawable.pic); Bitmap bmp=bmpDraw.getBitmap();

Android Bitmap总结(android/bitmap.h)

使用BitmapFactory (Creates Bitmap objects from various sources, including files, streams, and byte-arrays.) 使用BitmapFactory类decodeStream(InputStream is)解码位图资源,获取位图。 使用BitmapFactory类Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic); 方法解码位图资源。 BitmapFactory的所有函数都是static,这个辅助类可以通过资源ID、路径、文件、数据流等方式来获取位图。 以上方法在编程的时候可以自由选择,在Android SDK中说明可以支持的图片格式如下:png (preferred), jpg (acceptable), gif (discouraged),虽然bmp格式没有明确说明,但是在Android SDK Support Media Format中是明确说明了。 代码: 方法1:

获取位图的信息 要获取位图信息,比如位图大小、是否包含透明度、颜色格式等,获取得到Bitmap就迎刃而解了,这些信息在Bitmap的函数中可以轻松获取到。Android SDK中对Bitmap有详细说明,阅读起来也比较容易,不在此详细说明,这里只是辅助说明以下2点: 在Bitmap中对RGB颜色格式使用Bitmap.Config定义,仅包括ALPHA_8、ARGB_、ARGB_、RGB_,缺少了一些其他的,比如说RGB_,在开发中可能需要注意这个小问题; Bitmap还提供了compress()接口来压缩图片,不过AndroidSAK只支持PNG、JPG格式的压缩;其他格式的需要Android开发人员自己补充了。

显示位图 显示位图可以使用核心类Canvas,通过Canvas类的drawBirmap()显示位图,或者借助于BitmapDrawable来将Bitmap绘制到Canvas。当然,也可以通过BitmapDrawable将位图显示到View中。 转换为BitmapDrawable对象显示位图 // 获取位图 Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic); // 转换为BitmapDrawable对象 BitmapDrawable bmpDraw=new BitmapDrawable(bmp); // 显示位图 ImageView iv2 = (ImageView)findViewById(R.id.ImageView); iv2.setImageDrawable(bmpDraw); 使用Canvas类显示位图 这儿采用一个继承自View的子类Panel,在子类的OnDraw中显示 Java代码 public class MainActivity extends Activity {

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new Panel(this)); }

class Panel extends View{ public Panel(Context context) { super(context); } public void onDraw(Canvas canvas){ Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pic); canvas.drawColor(Color.BLACK); canvas.drawBitmap(bmp, , , null); } } }

位图缩放 (1)将一个位图按照需求重画一遍,画后的位图就是我们需要的了,与位图的显示几乎一样:drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)。 (2)在原有位图的基础上,缩放原位图,创建一个新的位图:CreateBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter) (3)借助Canvas的scale(float sx, float sy) (Preconcat the current matrix with the specified scale.),不过要注意此时整个画布都缩放了。 (4)借助Matrix: Java代码 Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pic); Matrix matrix=new Matrix(); matrix.postScale(0.2f, 0.2f); Bitmap dstbmp=Bitmap.createBitmap(bmp,0,0,bmp.getWidth(), bmp.getHeight(),matrix,true); canvas.drawColor(Color.BLACK); canvas.drawBitmap(dstbmp, , , null);

位图旋转 同样,位图的旋转也可以借助Matrix或者Canvas来实现。Matrix在线性代数中都学习过,Android SDK提供了Matrix类,可以通过各种接口来设置矩阵。结合上面的例子程序,将位图缩放例子程序在显示位图的时候前,增加位图旋转功能,修改代码如下: Matrix matrix = new Matrix(); //matrix.postScale(0.5f, 0.5f); matrix.setRotate(,,); canvas.drawBitmap(mbmpTest, matrix, mPaint); 旋转后的位图显示如下:

除了这种方法之外,我们也可以在使用Bitmap提供的函数如下: public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter),在原有位图旋转的基础上,创建新位图。 总结说明 对位图的操作,结合Android SDK中的类,详细的介绍完了。最后还需要强调的是:这篇文章只是对Android SDK中代码阅读分析,它代替不了你阅读Android SDK,深入的学习还是要仔细的阅读Android SDK。

转载自:

Scroller的使用 我也不知道怎么就稀里糊涂的看起来AndroidUI方面的东东了,偶尔感到无聊就看不下去了。开个博客记录一下吧,以后忘记了也方便翻一翻。Scroller在androi

Fused Location Provider Inthehighdayoflocation-basedmobiledealsandoffers,thequestionofdefininguser’slocationforspecificservices,collectingstatisticsorkeepingtrackofauser’smovementforspecificpurposesremainsasrelevantaseve

关于新版ADT每次创建项目都出现appcompat_v7的问题 做Android开发的朋友最近会发现,更新ADT至.6.0版本之后,创建新的安装项目,会出现appcompat_v7的内容,而且项目会报错。这到底是怎么回事呢?原来appc

标签: android/bitmap.h

本文链接地址:https://www.jiuchutong.com/biancheng/376663.html 转载请保留说明!

上一篇:Android-局部刷新ListView数据信息的自定义选择列表(android 刷新view)

下一篇:Scroller的使用(scrollcontroller)

  • 房地产开发企业销售自行开发的房地产项目
  • 赠送客户样品怎么写文案
  • 转登小规模以前的留抵税额能申请退吗
  • 印花税计税基数不包括哪些
  • 货车的折旧年限怎么算
  • 技术服务税率是多少 现金
  • 科技公司的成本如何核算
  • 工程施工企业的账务处理
  • 超过认证期限的发票未抵扣能红冲吗
  • 委托加工的账务处理
  • 房地产企业销售现房是否预缴增值税
  • 7月1日前购进的农产品如何抵扣
  • 苗木免税发票可以认证增值税吗
  • 营改增之后账务怎么处理
  • 待处理财产损益的二级科目
  • 土地使用权与房屋所有权不一致
  • 已认证的发票在哪里查
  • 个人转让股权的合理费用都有哪些
  • 公司购买的原材料,原价格销售合理吗
  • 海尔笔记本最新款
  • windows 临时文件夹
  • 如何打印word文档手机上
  • 金税盘减免税款怎么结转
  • 航空公司收取什么费
  • laravel learnku
  • 什么是应交税费科目
  • 小程序嵌入h5页面可以不写安全地址吗为什么
  • gazebo中机器人导航在rviz中不显示地图仅限显示轨迹
  • 设备进项抵扣新政策
  • 境外汇款所得税缴纳规定
  • php调用方法
  • dxva2.dll是什么意思
  • echarts3d地图
  • 小规模纳税人补缴企业所得税分录
  • yolov8目标检测测试输出类别个数
  • 土地差价款和土地出让金
  • 企业所得税减免20%按5%征收
  • 小规模纳税人是否可以开专票
  • php从数据库中读取数据
  • 制造费用期末怎么结转
  • 信用减值损失属于费用类科目吗
  • grid 框架
  • PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
  • vue-cli4创建项目
  • thinkphp百万级数据查询
  • 综合所得内容有哪些
  • 劳务派遣工资是死的吗
  • 员工餐费补助交个人所得税吗
  • 年终奖不属于工资有法律依据吗
  • 关于材料采购的通知
  • mysql数据表分区
  • 汇算清缴后取得上一年发票
  • 非营利组织相关论文
  • 固定资产在以后会计期间可以转回吗
  • 技术员差旅费计入哪个会计科目
  • 货代代缴增值税关税如何做账
  • 计费销售额如何计税
  • 会计政策变更的追溯调整法和未来适用法
  • MySQL部署时提示Table mysql.plugin doesn’t exist的解决方法
  • 摄像头无法启用
  • iis6配置网站
  • windows2000自动登陆
  • win8系统如何打开摄像头
  • windows8中“同步你的设置”使用介绍(让你的设置自动同步)
  • win7系统如何调节电脑屏幕亮度
  • fciv.exe
  • youphone.exe是什么
  • logd是什么进程
  • win8操作
  • win8.1无法更新
  • element拖拽
  • 利用漏洞每天获利万元
  • linux shell -s
  • 介绍一个简单的实验
  • 开发日记3雷火剑
  • jquery分页插件的使用
  • 如何解决老公有外遇
  • 为什么电子发票没有监制章
  • 深圳市税务局网上办税大厅官网
  • 大连市国家税务局官网登录
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设