精华内容
下载资源
问答
  • BCB 计算图片尺寸

    2014-01-12 13:23:53
    BCB编程获取图片尺寸大小,内部还包含获取系统分辨率大小
  • 图片内存计算大小

    千次阅读 2017-12-02 21:40:23
    一张1280*740 RGBA4448的图片内存大小 (M)? 2048*1024*(4+4+4+8)/(8*1024*1024) 解析:第一步:内存图片大小必须为2^n  第二步:RGBA8888是4位8bit 像素点:4*8 位数*颜色深度 第三步:内存大小 ...
       
    

    一张1280*740 RGBA4448的图片占内存大小  M)?

    2048*1024*(4+4+4+8)/(8*1024*1024)

    解析:第一步:内存中图片大小必须为2^n

          第二步:RGBA8888是4位8bit      像素点:4*8 位数*颜色深度

    第三步:内存大小 numBtyes

    width*height*bitPerPixel/8

       width*height*bytesPerPixel

     

    2048*1024*4*4/(8*1024*1024) = 4M

     

     

    480*320的图片 RGBA8888,占多少内存(M)?

    512*512*4*8/(8*1024*1024) = 1M

     

    1000*740的图片 RGBA8884,占多大内存?

    1024*1024*28/(8*1024*1024)

    展开全文
  • Ios图片内存计算

    千次阅读 2013-09-29 09:52:04
    一,IOS与图片内存 在IOS上,图片会被自动缩放到2的N次方大小。比如一张1024*1025的图片,占用的内存与一张1024*2048的...图片占用内存大小的计算的公式是;长*宽*4。这样一张512*512 占用的内存就是 512*512*4 =
     转自:http://www.cnblogs.com/yaokang/archive/2012/06/02/2532257.html

    一,IOS与图片内存
    在IOS上,图片会被自动缩放到2的N次方大小。比如一张1024*1025的图片,占用的内存与一张1024*2048的图片是一致的。图片占用内存大小的计算的公式是;长*宽*4。这样一张512*512 占用的内存就是 512*512*4 = 1M。其他尺寸以此类推。(ps:IOS上支持的最大尺寸为2048*2048)。
    二,cocos2d-x 的图片缓存
    Cocos2d-x 在构造一个精灵的时候会使用spriteWithFile或者spriteWithSpriteFrameName等 无论用哪种方式,cocos2d-x都会将这张图片加载到缓存中。如果是第一次加载这个图片,那就会先将这张图片加载到缓存,然后从缓存读取。如果缓存中已经存在,则直接从缓存中提取,免除了加载过程。
    图片的缓存主要由以下两个类来处理:CCSpriteFrameCache, CCTextureCache
    CCSpriteFrameCache加载的是一张拼接过的大图,每一个小图只是大图中的一个区域,这些区域信息都在plist文件中保存。用的时候只需要根据小图的名称就可以加载到这个区域。
    CCTextureCache 是普通的图片缓存,我们所有直接加载的图片都会默认放到这个缓存中,以提高调用效率。
    因此,每次加载一张图片,或者通过plist加载一张拼接图时,都会将整张图片加载到内存中。如果不去释放,那就会一直占用着。
    三,渲染内存。
    不要以为,计算内存时,只计算加载到缓存中的内存就可以了。以一张1024*1024的图片为例。
    CCSprite *pSprite = CCSprite::spriteWithFile("a.png");
    调用上边这行代码以后,可以在LEAKS工具中看到,增加了大约4M的内存。然后接着调用
    addChild(pSprite);
    这时,内存又增加了4M。也就是,一张图片,如果需要渲染的话,那它所占用的内存将要X2。
    再看看通过plist加载的图片,比如这张大图尺寸为2048*2048。想要加载其中的一张32*32的小图片
    CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("b.plist");
    此时内存增加16M (汗)
    CCSprite *pSpriteFrame = CCSprite::spriteWithSpriteFrameName("b1.png");
    b.png 大小为32*32 ,想着也就是增加一点点内存,可实际情况是增加16M内存。也就是只要渲染了其中的一部分,那么整张图片都要一起被加载。
    但是情况不是那么的糟糕,这些已经渲染的图片,如果再次加载的话,内存是不会再继续升高的,比如又增加了100个b.plist的另一个区域,图片内存还是共增加16+16 = 32M,而不会继续上升。
    四,缓存释放
    如果游戏有很多场景,在切换场景的时候可以把前一个场景的内存全部释放,防止总内存过高.
    CCTextureCache::sharedTextureCache()->removeAllTextures(); 释放到目前为止所有加载的图片
    CCTextureCache::sharedTextureCache()->removeUnusedTextures(); 将引用计数为1的图片释放掉CCTextureCache::sharedTextureCache()->removeTexture(); 单独释放某个图片
    CCSpriteFrameCache 与 CCTextureCache 释放的方法差不多。
    值得注意的是释放的时机,一般在切换场景的时候释放资源,如果从A场景切换到B场景,调用的函数顺序为B::init()---->A::exit()---->B::onEnter() 可如果使用了切换效果,比如CTransitionJumpZoom::transitionWithDuration这样的函数,则函数的调用顺序变为B::init()---->B::onEnter()---->A::exit() 而且第二种方式会有一瞬间将两个场景的资源叠加在一起,如果不采取过度,很可能会因为内存吃紧而崩溃。
    有时强制释放全部资源时,会使某个正在执行的动画失去引用而弹出异常,可以调用CCActionManager::sharedManager()->removeAllActions();来解决。
    五,内存优化
    优化的心得就是尽量去拼接图片,使图片边长尽可能的保持2的N次方并且装的很满。但要注意,有逻辑关系的图片尽量打包在一张大图里,另外一点就是打包的时候要考虑到层的分布。因为为了渲染效率可能会用到CCSpriteBatchNode;同一个BatchNode里的图片都是位于一个层级的,因此必须根据各个图片的层级关系,打包到不同的plist里。有时内存和效率不可以兼得,只能尽量平衡了。
    六,其他
    最后附一个各代IOS设备的内存限制情况
    设备                                              建议内存                   最大内存
    iPad2/iPhone4s/iphone4                170-180mb                 512mb
    iPad/iPod touch3,4/iphone3gs          40-80mb                  256mb
    iPod touch1,2/iPhone3g/iPhone1         25mb                    128mb
    上述建议内存只是一些人自己测试的结果,可用的RAM不大于最大内存的一半,如果程序超过最大内存的一半,则可能会挂掉。
    另外在LEAKS里查看模拟器中和真机总的内存,会有较大出入。在模拟器中的结果与实际更接近一些。
    展开全文
  • Android图片内存计算

    2016-01-20 21:38:04
    android图片内存计算一.图片分辨率图片的分辨率指图片中存储的信息量,是指每英寸图像内的像素点数,例如:1024x1024的图片所包含的像素点数为1024x1024二 .图片占用内存android有四种色彩模式加载图片 1. ...

    android图片内存的计算

    一.图片分辨率

    图片的分辨率指图片中存储的信息量,是指每英寸图像内的像素点数,例如:1024x1024的图片所包含的像素点数为1024x1024

    二 .图片占用内存

    android有四种色彩模式加载图片
    这里写图片描述
    1. ALPHA_8:每个像素点占用1byte内存
    2. ARGB_4444:每个像素点占用2byte内存
    3. ARGB_8888: 每个像素点占用4byte内存
    4. RGB_565: 每个像素点占用2byte内存

    所以理论上计算公式如下:

    所占内存 = 图片长度 * 图片宽度 * 每个像素所占的内存
    

    三.实际验证

    从网上找了两张图片:一张200x200,一张512x512
    代码很简单,如下:

    
    package com.example.cheng.bitmapdemo;
    
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    
    public class MainActivity extends ActionBarActivity {
    
        private TextView sizeTxt;
        private ImageView imageView;
        private Button button;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            initViews();
            //init();
    
        }
    
    
        private void initViews()
        {
            sizeTxt = (TextView)findViewById(R.id.sizeTxt);
            imageView = (ImageView)findViewById(R.id.image);
            button = (Button)findViewById(R.id.startBtn);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    init();
                }
            });
        }
    
        private void init()
        {
    /**        BitmapFactory.Options options = new BitmapFactory.Options();
            options.inPreferredConfig = Bitmap.Config.ARGB_8888;
            options.inSampleSize = 2;**/
            Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),R.drawable.i200_200);
    
            imageView.setImageBitmap(bitmap);
            sizeTxt.setText("size:" + bitmap.getRowBytes() * bitmap.getHeight());
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    }
    

    按照公式计算这张图片所占的内存大小为:512x512x4 = 1048576
    但是实际情况却等于4196304,整整大了四倍。开始怀疑是公式的问题,用MAT分析了一下内存情况,发现图片在转换成Bitmap对象之后,尺寸变成了1024*1024,
    这里写图片描述
    这里写图片描述
    所以实际占用内存为1024x1024x4 = 4194304,后来在代码中加了句

    Log.v("TAG","width:"+bitmap.getWidth()+",height:"+bitmap.getHeight());

    这里写图片描述
    至于为什么要这样做,可以参考这篇文章:
    http://blog.csdn.net/bigconvience/article/details/27054639

    后面我又尝试了下压缩这张图片,看所需要的内存是否会减少,结果发现内存并没有减少,原理压缩图片并不会减少内存的占用,但是可以减少apk包的大小。

    展开全文
  • 加载原理:Android 机默认为每个应用分配的堆内存是16M,当在界面显示图片时,需要的内存空间不是按图片的实际大小来计算的,而是按像素点的多少乘以每个像素点占用的空间大小来计算的。所以一不小心就OOM...
    
    
    加载原理:Android 机默认为每个应用分配的堆内存是16M,当在界面显示图片时,需要的内存空间不是按图片的实际大小来计算的,而是按像素点的多少乘以每个像素点占用的空间大小来计算的。
    所以一不小心就OOM(OutOfMemoryError)内存溢出了,
    举个例子:一张图片ps过后像素为 3648*2736不变,内存被转成1M,但是实际上加载时像素为3648*2736=9980928,和内存没关系
       在Android中一般为<p>                    ARGB_8888 : 4bytes 每个像素占据4 个字节
    <span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">                     =9980928 *2bytes</span><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">=38M>16M</span></p><p><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">所以加载图片是 实际上是创建的一个视图 并没有使用原图</span></p><p><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">代码实现:=19M>16M
    </span></p><p align="left"><pre name="code" class="html">protected void onCreate(BundlesavedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          iv = (ImageView) findViewById(R.id.iv);
       }
     
       public void loadImage(View view) {
          try {
         
             WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE);
             int screenWidth =wm.getDefaultDisplay().getWidth();
             int screenHeight =wm.getDefaultDisplay().getHeight();
             System.out.println("屏幕width:" + screenWidth);
             System.out.println("屏幕height:" + screenHeight);
     
             //创建一个可选项对象,该对象用于配置图片的处理参数
             Options opts = new Options();
             // 将该参数设置为true 则加载器不加载图片, 而是把图片的out(宽和高)的字段信息取出来
             opts.inJustDecodeBounds = true;
             BitmapFactory.decodeFile("mnt/sdcard/big.jpg", opts);
             
             
             int outWidth = opts.outWidth;
             int outHeight = opts.outHeight;
             // 计算缩放比例
             int widthScale = outWidth /screenWidth;
             int heightScale = outHeight/ screenHeight;
             //计算出最大的比例
             int scale = widthScale >heightScale ? widthScale : heightScale;
             System.out.println("scale:"+scale);
             // 使用缩放比例进行缩放加载图片
             opts.inJustDecodeBounds = false;// 加载器就会返回图片了
             opts.inSampleSize = scale;
             Bitmap bitmap = BitmapFactory
                    .decodeFile("mnt/sdcard/big.jpg", opts);
             //显示在屏幕上
             iv.setImageBitmap(bitmap);
          } catch (Exception e) {
             e.printStackTrace();
          }
       }







     
    
    =19M>16M
    展开全文
  • 图片内存容量计算公式

    万次阅读 2014-12-16 19:12:18
    1. 图片内存容量计算公式为:  图片所占内存大小 = 图片长度(像素) * 图片宽度(像素) * 一个像素所占内存空间(单位:字节)   一般地,一个象素所占内存空间根据机器颜色数(专业词汇叫色深Color Depth)...
  • Glide探究一 如何计算加载后的图片尺寸?一、疑问二、请求尺寸三、三种尺寸四、DownsampleStrategy五、BitmapFactory.Options六、Downsampler七、RequestOptions八、总结 一、疑问 调用RequestBuilder into(@...
  • [Android] Bitmap的内存计算

    千次阅读 2019-07-27 08:00:00
    2、不同图片来源对内存大小有什么影响? Bitmap bitmap = Bitmap.createBitmap(100,100,Bitmap.Config.ARGB_8888); 依然以如此声明一个bitmap为例,参数就决定了bitmap的大小。(以Android 8.0+平台为例,这行代码...
  • 一.1张图片内存如何计算一张图片占用的内存由以下两个因素决定: 图片的像素点个数 单位像素占用的字节数 其中图片的像素点个数是图片的宽度与长度的积,所以一张图片占用的内存值为:图片长度 * 图片宽度 * 单位像素...
  • cocos2d 中图片占用内存计算

    千次阅读 2012-04-13 15:39:21
    网上也搜了一下如果计算图片加载后在内存中的计算方法,不过都只给了一个公式:width*height*4(byte),并没有说4是怎么来的 之前想明白了因为没有记录,突然去想的时候又给忘了,所以这里写一下万一以后忘了可以看下...
  • android中Bitmap缩放、压缩、占用内存计算等 本篇文章主要搞定的问题: (1)Bitmap占用的手机内存怎样计算? 占用内存的大小和那些因素相关? (2)质量压缩 (3)尺寸压缩 Bitmap vs 内存 图片占用内存...
  • 如果已知一个物体的实际大小(比如在图片中放上一枚1元硬币或者知道某个柜子有多高),那么就可以通过长度比和参照物的已知长度测出物体长度。具体方法见文献[1],因为需要一些矩阵运算和摄像头成像方面的推导,这里只...
  • 加载图片内存

    千次阅读 2015-04-21 09:08:07
    2、只解析图片尺寸 3、获取图片的宽高信息 4、获取手机屏幕的宽高 5、计算缩放比例(图片的大小/窗口的大小)按大的进行缩放 6、解析图片全部信息 scale 缩放比例
  • Android内存优化之图片优化

    万次阅读 多人点赞 2019-04-08 11:52:23
    关于图片优化,大概如下 ...:Android系统的进程(APP级别)有最大的内存限制,超过这个限制系统就会抛出)OOM错误 图片OOM问题产生的几种情况 1.一个页面一次加载过多的图片 2.加载大图片没有进行压缩 3....
  • 图片下载 也可以 用 AsyncTask 见本人其他博客  private Bitmap getBitmap(String uri) {  InputStream is=null;  try {  URL file=new URL(uri);  HttpURLConnection conn=(Http
  • BitmapFactory.decodeFile(imageFile);...要想正常使用,则需要分配更少的内存空间来存储。 BitmapFactory.Options.inSampleSize 设置恰当的inSampleSize可以使BitmapFactory分配更少的空间以消除该错误。inS
  • 图片格式及其内存占用

    千次阅读 2017-11-27 00:16:01
    1、内存计算公式 默认情况下,在cocos2d里面加载一张图片的时候,图片中每一个像素点使用4个byte(8位)来表示--分别代表red、green、blue和alpha透明通道。这个就简称RGBA8888(32-bit图)。因此使用默认的像素...
  • Glide图片内存优化分析

    千次阅读 2016-12-23 10:51:51
    所以就分拆下,一部分一部分的来聊这个话题,今天说说Glide的图片内存优化 图片内存的处理是块很值得深入研究的内容,涉及到的难点也有多。 首先,内存总量有限,必须限制图片加载的内存 弱引用 ...
  • 毫无疑问,太尼玛吃内存了这玩意,Android手机本来内存就这么点,而且还是多个应用共享,稍微不注意给你送个惊喜,来个OutofMemoryError,不要太酸爽哦,所以作为移动软件开发者,解决好Bitmap是一个必修课,今天...
  • 降低图片内存消耗

    千次阅读 2015-08-03 15:21:13
    我们知道产生OOM的原因是内存的使用量...而今天要讨论的主要是减少图片内存的消耗,因为图片消耗内存比较大,大多数应用程序都会有大量图片的加载,产生OOM往往也会发生在加载大量图片的时候。所以对图片占用内存
  • 相对情况下图片越大,占用内存越大图片尺寸图片尺寸=图片的宽高,相对情况下宽高越大,占用内存越大填充区域填充区域就是图片显示在屏幕上的大小,可以理解为ImageView的大小。相对情况下宽高越大,占用内存越小。 ...
  • 取决于系统要求,图像在内存中的存储,往往和原来的图片尺寸不一样,在windows图像宽度必须是bytes (32 bits) aligned, 这里要注意的是sz和n的数据类型,因为他们决定了位数,比如int是32位的,最大只能32位长的...
  • Android 获取图片尺寸大小

    千次阅读 2019-01-18 13:39:38
    文章目录1、简介2、功能实现1)添加sd 卡读写权限2)、功能代码3、log显示4、不同位置获取图片的路径的转化 Bitmap1) drawable 里面2)assets 文件3)SD K 1、简介 获得图片的像素大小 2、功能实现 图片我是放到sd...
  • 输入神经网络的图片尺寸如何确定

    千次阅读 2020-02-17 14:48:39
    输入网络的图片大小要...执行了5次,就是2^5,那输入图片尺寸就必须是2的5次方,32的倍数。 其中pool是看主线的pool有几次。 输入图片大小变小之后,batchsize可以调大一些。在不超内存的情况下,batch越大越好 ...
  • 一、获取图像真实宽高、 二、计算解码区域、 三、设置解码参数 内存复用 像素格式、 四、图像绘制、 五、执行效果、 六、源码及资源下载
  • 计算模型的显存占用率 如何计算模型以及中间变量的显存占用大小可以参考此文。 如何在Pytorch中精细化利用显存,牺牲计算速度减少显存用量,将计算过程分为两半,先计算一半模型的结果,保存中间结果再计算后面一半...
  • Android中获取图片尺寸大小两种方法

    千次阅读 2020-08-20 15:43:28
    两种方法 建议用第二种 ... 得出宽高,由于这个方法直接把图片引入内存, 如果图片过大,将会引发OOM;*/ //方法一:通过uri把图片转化为bitmap的方法 Bitmap bitmap = BitmapFactory.decodeFile(path); ..
  • 图片引起的内存溢出,如何解决的

    千次阅读 2019-01-26 10:25:34
    如何解决内存溢出:(内存为...一般是(80%)因为加载了很多图片,(20% 代码垃圾) 可以用三级缓存的方式来解决;先是内存缓存(速度快, 而且不消耗流量,最优先读取内存缓存), 再是本地缓存(速度较快, 也不消耗流...
  • 因为大家在开发应用的时候,都会使用一些图片来表现UI,用户也喜欢看图片,看文字获取信息太慢并且不直观,如果美工设计的好,看图片基本上不怎么看你的文字内容就知道你要表达什么,例如所有的购物网站都会编辑很多...
  • Android Bitmap图片处理,防止内存溢出

    千次阅读 2016-02-24 21:47:56
    在android 中加载一张图片,如果图片过大就有可能会出现内存溢出,特别是在加载数据过多的时候,像ListView 和GridView等重复...首先我们来看一张图片加载到内存中所占据的内存大小的计算方法。*在加载图片是需要的内存

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,871
精华内容 16,348
关键字:

内存计算图片尺寸