bitmapBitmap 究竟占多大内存

bitmap  时间:2021-07-22  阅读:()

Android几种简单的获取Bitmap位图实例

Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height);//参数一:位图资源,参数二:位图中X坐标,参数三,位图中Y坐标,参数四:生成位图的宽度,参数四:生成位图的高度。

注意:X+width不能大于source原本位图的宽度,width不能等于0,y+height不能大于原本位图高度,height不能小于0

android 读取Bitmap的几种方式

想读取本地项目里的资源图片,但又不能用到R文件。

查了很多资料终于找到了。

现总结以下几种读取Bitmap的方法。

1.以文件流的方式,假设在sdcard下有 test.png图片 FileInputStream fis = new FileInputStream("/sdcard/test.png"); Bitmap bitmap=BitmapFactory.decodeStream(fis); 2. 以R文件的方式,假设 res/drawable下有 test.jpg文件Bitmapbitmap =BitmapFactory.decodeResource(this.getContext().getResources(), R.drawable.test); 3.以ResourceStream的方式,但不用到R文件。

Bitmap.bitmap=BitmapFactory.decodeStream(getClass().getResourceAsStream(“/res/drawable/test.png”)); 图片名就可以读取到 Bitmap啦。

BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2; //图片宽高都为原来的二分之一,即图片为原来的四分一 //以上代码可以优化内存溢出,但它只是改变图片大小,并不能彻底解决内存溢出。

BITMAP与CBitmap有什么区别,BITMAP是什么类型

CBitmap 是 MFC 对 HBITMAP 的封装 HBITMAP 是Windows 定义的 GDI 位图的句柄,一定程度上代表了这个HBITMAP BITMAP 是 包含了位图数据的结构体

android中bitmap的用法

参见代码: /////////////////////////////////////////////////////////////////////////; // Save canvas to file. // Get the width and height of screen. DisplayMetrics display = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(display); int width = display.widthPixels; int height = display.heightPixels; // Create bitmap. Bitmap bt = Bitmap.createBitmap(width, height, Config.ARGB_8888); // Create canvas. Canvas canvas = new Canvas(); canvas.setBitmap(bt); Paint paint = new Paint(); // Draw a oval. int left = width>>2; int right = left*3; = height>>2; int bottom =*3; paint.setStyle(Style.STROKE); canvas.drawOval(new RectF(,right,bottom), paint); // Draw text. paint.setTextAlign(Align.CENTER); paint.setColor(Color.RED); canvas.drawText("Hi,man!", width>>1, height>>1,paint); // Save canvas. canvas.save(Canvas.ALL_SAVE_FLAG); canvas.restore(); //Save canvas to file. File file = new File(getFilesDir(), "hiMan.png"); FileOutputStream fos = null; try { fos = new FileOutputStream(file); press(Bitmap.CompressFormat.PNG, 50, fos); } catch (Exception e) { e.printStackTrace(); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } }

什么是bmp图像

BMP取自位图BitMaP的缩写,也称为DIB(与设备无关的位图),是一种与显示器无关的位图数字图像文件格式。

常见于微软视窗和OS/2操作系统,Windows GDI API内部使用的DIB数据结构与 BMP 文件格式几乎相同。

图像通常保存的颜色深度有2(1位)、16(4位)、256(8位)、65536(16位)和1670万(24位)种颜色(其中位是表示每点所用的数据位)。

8位图像可以是索引彩色图像外,也可以是灰阶图像。

表示透明的alpha通道也可以保存在一个类似于灰阶图像的独立文件中。

带有集成的alpha通道的32位版本已经随着Windows XP出现,它在视窗的登录和主题系统中都有使用。

扩展资料: BMP文件通常是不压缩的,所以它们通常比同一幅图像的压缩图像文件格式要大很多。

例如,一个800×600的24位几乎占据1.4MB空间。

因此它们通常不适合在因特网或者其他低速或者有容量限制的介质上进行传输。

根据颜色深度的不同,图像上的一个像素可以用一个或者多个字节表示,它由n/8所确定(n是位深度,1字节包含8个数据位)。

图片浏览器等基于字节的ASCII值计算像素的颜色,然后从调色板中读出相应的值。

参考资料来源:搜狗百科-BMP

Bitmap 究竟占多大内存

实际情况:一张 522x686 的 PNG 图片,我把它放到 drawable-xxhdpi 目录下,在三星s6上加载,占用内存2547360B。

自己计算的情况:一张522*686的PNG 图片,我把它放到 drawable-xxhdpi 目录下,在三星s6上加载。

其中xxhdpi 对应的 density 为480,targetDensity 对应三星s6的密度为640,所以: 522/480 * 640 * 686/480 *640 * 4 = 2546432B,和上面的实际情况是不一样,有误差的,误差哪里来的?接着往下看! 哪里有误差,追踪源码,源码给出的计算方法如下: 在我们的例子中, scaledWidth = int( 522 * 640 / 480f + 0.5) = int(696.5) = 696 scaledHeight = int( 686 * 640 / 480f + 0.5) = int(915.16666…) = 915 然后 915 * 696 * 4 = 2547360。

这下就对了! 所以,在你的APP适配屏幕的时候,一定要多做几套图。

不要觉得好像在drawable-xxhdpi放一套图我的app运行起来好像也没有问题啊,实则不然。

适用于ppi为640的图你放到ppi为320的设备中显示的话,内存会是4倍。

(后面这两句话不对) 实例分析: lhdpi:120 mhdpi:160 hdpi:240 xhdpi:320 xxhdpi:480 xxxhdpi:640 如果我的app中有一个imageview,宽和高为100*100,那么在适配S6(ppi为640)我在xxxhdpi中放了一个100*100的图片,那么此图在S6的这个imageview中占内存为 ( 100 * 640 / 640 + 0.5)*( 100 * 640 / 640 + 0.5)*4也就是40401B(精确值,按照源码中的方法算出来的)。

如果我在xxxhdpi中没存放图片,只在xhdpi中放了个100*100的图片,那么这个app中的这个imageview会占多少内存呢?计算如下: (100*640/320 + 0.5)*(100*640/320 + 0.5) *4= 160801B(精确值,按照源码中的方法算出来的), 约4倍于直接把此图放在与设备dpi(S6的dpi为640)相近的资源文件夹xxxhdpi中。

为什么会是四倍呢?因为S6从与它DPI接近的xxxhdpi找不到图片,然后在xhdpi中找到图片,因为xhdpi对应的dpi是320,而xxxhdpi对应的dpi是640,我把你320的图片拿过来当做640的用,肯定要对你进行放大,宽和高分别放大(640/320 = 2)倍,所以占用内存就是4倍了。

如果在xhdpi也没找到,而只在mhdpi中找到,那么就要把宽和高分别放大(640/160 = 4)倍了,那么占用内存就不是4倍,而是16倍了。

上面说的是设备DPI高于图片所存放的文件夹的dpi的情况:系统把图片拿过来用时会自动把图片放大,所以内存占用也是原来的数倍甚至是多倍。

如果我的设备dpi小于图片所在的文件夹的dpi,那么系统把图片拿过来用时会不会自动把图片缩小呢?确实是这样的! 如果适配时我只在xxxhdpi:640放置了图片100*100,而我的设备是320的,那么设备在对应的xhdpi:320找不到图片就会去xxxhdpi:640文件夹中寻找,那么在我的设备中,此图片占多少内存呢?计算如下: (100*320/640 + 0.5)*(100*320/640 + 0.5) *4 = 2550B。

所以我们UI给图的时候,"就目前来讲,最佳放置图片资源的文件夹是drawable-xxhdpi"。

为什么呢? 比方说我在我的代码中固定一个imageview的宽高是100*100DP,那么在mhdpi:160放的图片就必须是100*100,hdpi:240是150*150, xhdpi:320是200*200, xxhdpi:480存放的是300*300, xxxhdpi:640是400*400。

这样的话,在不同的手机上,这个imageview看起来是差不多大的。

但是现实情况是UI不会做这么多图的,他们只会给出一套图,那我们要低密度的图还是高密度的图呢?肯定是要相对来说密度较高的图。

比方说UI给我们的只有300*300的,我们把它放在xxhdpi下,但是我的设备dpi是158(接近160),因为只有这一套图,那么系统会去xxhdpi取图,但是取过来之后,会进行相应的缩小,怎么缩小?宽高分别缩小(xxhdpi/mhdpi,也就是480/160)3倍,那么300*300缩小为100*100了,刚好在我的160的设备上用。

不浪费也不会显得很模糊。

还是总结一下: 1.图片占用多大内存?和设备DPI以及图片所在文件夹对应的dpi有关,因为计算公式: (设备DPI / 图片所在文件夹所对应的dpi * 图片宽度 + 0.5)*(设备DPI / 图片所在文件夹所对应的dpi * 图片高度 + 0.5)*图片每个像素占用的字节数(ARGB_8888占4个) 2.图片放大或者缩小多少倍?和设备DPI所对应的文件夹的dpi以及图片所在的文件夹所对应的dpi有关: 比方我设备dpi是620,“设备DPI所对应的文件夹的dpi”是640,而图片存在于 xhdpi:320 ,那么图片宽高分别放大两倍。

比方我的设备dpi144,“设备DPI所对应的文件夹的dpi”就是160,而图片存在于 xxhdpi:480,那么图片宽高分别缩小 3倍。

Boomer.host:$4.95/年-512MB/5GB/500GB/德克萨斯州(休斯顿)

部落曾经在去年分享过一次Boomer.host的信息,商家自述始于2018年,提供基于OpenVZ架构的VPS主机,配置不高价格较低。最近,主机商又在LET发了几款特价年付主机促销,最低每年仅4.95美元起,有独立IPv4+IPv6,开设在德克萨斯州休斯顿机房。下面列出几款VPS主机配置信息。CPU:1core内存:512MB硬盘:5G SSD流量:500GB/500Mbps架构:KVMIP/面板...

Sharktech$129/月,1Gbps不限流量,E5-2678v3(24核48线程)

Sharktech最近洛杉矶和丹佛低价配置大部分都无货了,只有荷兰机房还有少量库存,商家又提供了两款洛杉矶特价独立服务器,价格不错,CPU/内存/硬盘都是高配,1-10Gbps带宽不限流量最低129美元/月起。鲨鱼机房(Sharktech)我们也叫它SK机房,是一家成立于2003年的老牌国外主机商,提供的产品包括独立服务器租用、VPS主机等,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹等,主...

Puaex:香港vds,wtt套餐,G口带宽不限流量;可解流媒体,限量补货

puaex怎么样?puaex是一家去年成立的国人商家,本站也分享过几次,他家主要销售香港商宽的套餐,给的全部为G口带宽,而且是不限流量的,目前有WTT和HKBN两种线路的方面,虽然商家的价格比较贵,但是每次补一些货,就会被抢空,之前一直都是断货的状态,目前商家进行了补货,有需要这种类型机器的朋友可以入手。点击进入:puaex商家官方网站Puaex香港vds套餐:全部为KVM虚拟架构,G口的带宽,可...

bitmap为你推荐
kuaishi做什么小生意赚钱?qq空间维护QQ空间维护是什么情况?怎么解除?微软将停止支持32位Win10系统win10 64位怎么兼容32位操控人心如何操控自己的人生发送验证码微信登录需要好友发验证码怎么办oa源码lotus的oa源码,怎么样?盈科oa办公系统oa的登陆帐号和密码微服务网关微服务网页打不开是什么原因3d视频制作三D电影 是怎样做出来 的杀戮空间联机杀戮间怎么联机 急!
免费linux主机 naning9韩国官网 plesk 服务器评测 免费网络电视 个人域名 股票老左 idc是什么 域名和空间 广州服务器 免费美国空间 如何用qq邮箱发邮件 如何安装服务器系统 香港新世界中心 上海服务器 超级服务器 独享主机 网站加速软件 shuang12 云服务器比较 更多