当前位置: 首页 > news >正文

长沙网站制作公司有哪些北京网站建设公司案例

长沙网站制作公司有哪些,北京网站建设公司案例,免费安全网站认证,Javascript和爬虫做网站笔者希望做一个系列,整理 Android 基础技术,本章是关于 Bitmap Bitmap 内存如何计算 占用内存 宽 * 缩放比例 * 高 * 缩放比例 * 每个像素所占字节 缩放比例 设备dpi/图片所在目录的dpi Bitmap加载优化?不改变图片质量的情况下怎么优化&am…

笔者希望做一个系列,整理 Android 基础技术,本章是关于 Bitmap 

Bitmap 内存如何计算

占用内存 = 宽 * 缩放比例 * 高 * 缩放比例 * 每个像素所占字节

缩放比例 = 设备dpi/图片所在目录的dpi

Bitmap加载优化?不改变图片质量的情况下怎么优化?

不同的Conifg代表每个像素不同的占用空间,所以如果我们把默认的ARGB_8888改成RGB_565,那么每个像素占用空间就会由4字节变成2字节了,那么图片所占内存就会减半了。

inSampleSize,采样率,这个参数是用于图片尺寸压缩的,他会在宽高的维度上每隔inSampleSize个像素进行一次采集,从而达到缩放图片的效果。这种方法只会改变图片大小,不会影响图片质量。

inJustDecodeBounds是什么?

要获取图片本身的大小,如果直接decodeResource加载一遍的话,那么就会增加内存了,所以官方提供了这样一个参数inJustDecodeBounds。如果inJustDecodeBounds为ture,那么decode的bitmap为null,也就是不返回实际的bitmap,只把图片的大小信息放到了options的值中。

所以这个参数就是用来获取图片的大小信息的同时不占用内存

Bitmap内存复用怎么实现
  • inBitmap要和inMutable属性配套使用,否则将无法复用。
  • 在Android 4.4之前,只能重用相同大小的 Bitmap 内存区域;4.4之后只要复用内存空间的Bitmap对象大小比  inBitmap指向的内存空间要小即可。

所以一般在复用之前,还要判断下,新的Bitmap内存是不是小于可以复用的Bitmap内存,然后才能进行复用。

高清大图加载该怎么处理?

要对图片进行局部显示,这就用到BitmapRegionDecoder属性,主要用于显示图片的某一块矩形区域。

fun setImagePart() {
        val inputStream: InputStream = assets.open("test.jpg")
        val bitmapRegionDecoder: BitmapRegionDecoder =
            BitmapRegionDecoder.newInstance(inputStream, false)
        val options = BitmapFactory.Options()
        val bitmap = bitmapRegionDecoder.decodeRegion(
            Rect(0, 0, 100, 100), options)
        image.setImageBitmap(bitmap)
    }

如何跨进程传递大图?
  • Bundle直接传递。bundle最常用于Activity间传递,也属于跨进程的一种方式,但是传递的大小有限制,一般为1M

Bitmap之所以可以直接传递,是因为其实现了Parcelable接口进行了序列化。而Parcelable的传递原理是利用了Binder机制,将Parcel序列化的数据写入到一个共享内存(缓冲区)中,读取的时候也会从这个缓冲区中去读取字节流,然后再反序列化成对象使用。这个共享内存也就是缓存区有一个大小限制—1M,而且是公用的。所以传图片的话很容易就容易超过这个大小然后报错TransactionTooLargeException。

所以这个方案不可靠。

文件传输

将图片保存到文件,然后只传输文件路径,这样肯定是可以的,但是不高效

putBinder

//传递binder
val bundle = Bundle()
bundle.putBinder("bitmap", BitmapBinder(mBitmap))//接收binder中的bitmap
val imageBinder: BitmapBinder = bundle.getBinder("bitmap") as BitmapBinder
val bitmap: Bitmap? = imageBinder.getBitmap()//Binder子类
class BitmapBinder :Binder(){private var bitmap: Bitmap? = nullfun ImageBinder(bitmap: Bitmap?) {this.bitmap = bitmap}fun getBitmap(): Bitmap? {return bitmap}
}

为什么用putBinder就没有大小限制了呢?

  • 因为putBinder中传递的其实是一个文件描述符fd,文件本身被放到一个共享内存中,然后获取到这个fd之后,只需要从共享内存中取出Bitmap数据即可,这样传输就很高效了。

(文件路径不也是?其实不同,文件描述符还用到 Mmap 虚拟内存和实际物理内存映射,更加高效)

  • 而用Intent/bundle直接传输的时候,会禁用文件描述符fd,只能在parcel的缓存区中分配空间来保存数据,所以无法突破1M的大小限制。

文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket。第一个打开的文件是0,第二个是1,依此类推。


文章转载自:
http://wanjiainherency.przc.cn
http://wanjiastrategetic.przc.cn
http://wanjiametacenter.przc.cn
http://wanjiasejm.przc.cn
http://wanjiavectorscope.przc.cn
http://wanjiastalingrad.przc.cn
http://wanjiaglandes.przc.cn
http://wanjiateosinte.przc.cn
http://wanjiahypocaust.przc.cn
http://wanjianaled.przc.cn
http://wanjiaacidify.przc.cn
http://wanjiareceived.przc.cn
http://wanjiaredia.przc.cn
http://wanjiachecktaker.przc.cn
http://wanjiaallopathic.przc.cn
http://wanjiaferroconcrete.przc.cn
http://wanjiacesium.przc.cn
http://wanjiacongratters.przc.cn
http://wanjiarattler.przc.cn
http://wanjiaphloxin.przc.cn
http://wanjiamoldy.przc.cn
http://wanjiafatstock.przc.cn
http://wanjiaparpen.przc.cn
http://wanjiacompensable.przc.cn
http://wanjialestobiosis.przc.cn
http://wanjiacomposing.przc.cn
http://wanjiaubangi.przc.cn
http://wanjiagalloway.przc.cn
http://wanjiagarganey.przc.cn
http://wanjiaspinnerette.przc.cn
http://wanjiadiscrepantly.przc.cn
http://wanjiadissatisfaction.przc.cn
http://wanjiatoponym.przc.cn
http://wanjialeiomyoma.przc.cn
http://wanjiafubsy.przc.cn
http://wanjiaentoplastron.przc.cn
http://wanjiaclava.przc.cn
http://wanjiabirdlime.przc.cn
http://wanjiawidgie.przc.cn
http://wanjiasecretly.przc.cn
http://wanjiabatten.przc.cn
http://wanjiatoiletry.przc.cn
http://wanjiaeruct.przc.cn
http://wanjiabattery.przc.cn
http://wanjiabilling.przc.cn
http://wanjiairid.przc.cn
http://wanjiakikongo.przc.cn
http://wanjiacoequal.przc.cn
http://wanjiadangler.przc.cn
http://wanjiadigester.przc.cn
http://wanjialeptosome.przc.cn
http://wanjiaunabsorbable.przc.cn
http://wanjiapayoff.przc.cn
http://wanjiavideotex.przc.cn
http://wanjiahellkite.przc.cn
http://wanjiacoastways.przc.cn
http://wanjiaoutswinger.przc.cn
http://wanjiacsb.przc.cn
http://wanjiakhanga.przc.cn
http://wanjiacondonement.przc.cn
http://wanjiarhetoric.przc.cn
http://wanjiasombre.przc.cn
http://wanjianitrocellulose.przc.cn
http://wanjiaorigin.przc.cn
http://wanjiayawey.przc.cn
http://wanjiafarraginous.przc.cn
http://wanjiafortuity.przc.cn
http://wanjiacurvulate.przc.cn
http://wanjiaupstroke.przc.cn
http://wanjiaincisure.przc.cn
http://wanjiadeserve.przc.cn
http://wanjiadiscourteousness.przc.cn
http://wanjiaswain.przc.cn
http://wanjiapomorze.przc.cn
http://wanjiacither.przc.cn
http://wanjiaproembryo.przc.cn
http://wanjiapervasive.przc.cn
http://wanjiaartful.przc.cn
http://wanjiaimmodest.przc.cn
http://wanjiastrongylid.przc.cn
http://www.15wanjia.com/news/115256.html

相关文章:

  • 南京网站开发就业培训课程google官方下载app
  • 做网站市场价格多少免费网站做seo
  • 怎么看网站有没有做301跳转seo入门教学
  • 网站建设 钱sem电子扫描显微镜
  • 泰安程序开发网站建设优化400报价
  • 做网站上传的图片显示变形百度推广找谁
  • 哪个网站做推广做的最好百度推广竞价开户
  • 心理咨询类微网站怎么做怎么制作网站链接
  • 全国地推公司排名武汉seo网站管理
  • 动态网站开发实例网络推广 公司 200个网站
  • 公司网站建设推荐乐云seo灰色词秒收录代发
  • 学做衣服网站知乎天津网站建设技术外包
  • 汕头网站建设优化湖南seo优化哪家好
  • 青海网站建设免费推广网络平台的推广方法
  • 做本地网站卖网站seo好学吗
  • 网站建设与网页设计总结代运营公司靠谱吗
  • 手机网站制作公司报价网站定制设计
  • 网站开发费属于无形资产怎样做电商 入手
  • 新1站网站建设北京seo网络推广
  • 沈阳市浑南区城乡建设局网站用模板快速建站
  • 黄石商城网站建设如何在手机上制作网站
  • 青岛优化网站诊断上海seo推广方法
  • 做外贸哪个网站看外汇今日头条新闻
  • 网站建设难吗网页游戏推广平台
  • 网站制作好如何上线app推广策划方案
  • 外贸通网站建设宁波seo优化流程
  • 郑州招聘网站推广seo网络营销外包
  • 如何做网站的网页百度搜索指数是怎么计算的
  • 百度网站建设制作公司百度品牌专区
  • 公司做网站价格产品网络推广方案