精华内容
参与话题
问答
  • bitmap

    千次阅读 2013-11-03 10:38:02
    bitmap实现对raid -1 的优化 环境: RHEL5.3,磁盘阵列raid-1(可以建立在不同磁盘或分区上,在本实验中我们使用sdb和sdd) 原理描述: 在mdadm操作中,bitmap用于记录RAID 阵列从上次同步之后更改的部分,...

    用bitmap实现对raid -1 的优化

    环境:
    RHEL5.3,磁盘阵列raid-1(可以建立在不同磁盘或分区上,在本实验中我们使用sdb和sdd)

    原理描述:
    在mdadm操作中,bitmap用于记录RAID 阵列从上次同步之后更改的部分,即记录RAID阵列有多少个块已经同步(resync)。RAID 阵列会定期将信息写入到bitmap 中。在一般情况下,磁盘阵列在重启之后会有一个完整的同步过程。如果有bitmap,那么只有被修改后的数据才会被同步。在另一种情况下,如果阵列一块磁盘被取出,bitmap不会被清除,当这块磁盘重新加入阵列时,同样只会同步改变过的数据。所以bitmap能够减少磁盘阵列同步的时间,起到优化raid1的作用。Bitmap一般写入的位置是磁盘的metadata或者我们成为外部的另外,要注意的是,bitmap只是对raid1的功能,对raid0等其他设备来说是没有意义的。

    Bitmap的使用:
    Bitmap一般写入磁盘的metadata中,也可以写入文件系统的某个目录下。由参数—bitmap后面的参数来决定,internal表示写入metadata,也可指定目录.

    1)  在建立时使用
    [root@localhost ~]# mdadm -C /dev/md0 -l1 -n2 /dev/sd[bd]1 --bitmap=internal
    mdadm: array /dev/md0 started.
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid1]
    md3 : active raid1 sdb1[1] sdd1 [0]
    503872 blocks [2/2] [UU]
    bitmap: 62/62 pages [248KB], 4KB chunk
        unused devices:

    2)  在建完raid1之后使用
    开启bitmap
    [root@localhost ~]# mdadm /dev/md0 --grow --bitmap=internal
    关闭bitmap:
    [root@localhost ~]# mdadm /dev/md0 --grow --bitmap=none

    3)  保存在文件中举例
        [root@localhost ~]# mdadm -C /dev/md0 -l1 -n2 /dev/sd[bd]1 --bitmap=/tmp/bitmap

    4)  另外,可以使用—examine-bitmap或者-X来查看存储在文件或者设备元数据中的 bitmap记录的信息,当存储在元数据区时,参数是/dev/sdx,当参数是文件时,要注意的是使用bitmap文件记录要求这个文件不能在RAID阵列上或者其相关的设备上,而且使用assemble命令时要指定bitmap文件名字。另外,--bitmap-chunk表示每个bit位代表RAID设备多大的数据块,单位是KB;而--delay(或者其缩写-d)指定多长事件同步bitmap信息到文件或者设备上,单位是秒,默认是5秒。--force(或者其缩写)表示覆盖掉已经存在bitmap文件。
    [root@localhost ~]# mdadm –X /dev/sdb1
    或者[root@localhost ~]# mdadm –X /tmp/aaa(文件名)
    unused devices:
    Filename : /dev/sdb1         
    Magic : 6d746962         
    Version : 4            
    UUID : bcccddb7:0f529abd:672e1f66:7e68bbc8         
    Events : 6
    Events Cleared :6         
    State : OK      
    Chunksize : 4 KB         
    Daemon : 5s flush period      
    Write Mode : Normal      
    Sync Size : 2096384 (2047.59 MiB 2146.70 MB)         
    Bitmap : 125968 bits (chunks), 0 dirty (0.0%)

    5) bitmap模式在阵列处于降级(degrade)状态能够记录有哪些块被写过,当那个暂时失效的磁盘使用--re-add参数被重新添加后,阵列只重构这期间修改的数据块,减少阵列重构的时间。bitmap信息中dirty的数量表示降级期间被修改过的块。
    #mdadm /dev/md0 -f /dev/sdb /dev/sd
    #cat /proc/mdstat
    #mdadm -X /tmp/md0-bm
    #mdadm dd if=/dev/zero of=/dev/md0 bs=1M count=1024
    #mdadm -X /tmp/md0-bm
    #mdadm /dev/md0 -r /dev/sdb --re-add /dev/sdb
    #cat /proc/mdstat
    #mdadm -X /tmp/md0-bm


    展开全文
  • Bitmap

    千次阅读 2015-10-21 13:29:04
    Bitmap是Android系统中的图像处理的最重要类之一。 用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作, 并可以指定格式保存图像文件。本文从应用的角度,着重介绍怎么用Bitmap来实现这些功能。 一、Bitmap...

    Bitmap是Android系统中的图像处理的最重要类之一。
    用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,
    并可以指定格式保存图像文件。本文从应用的角度,着重介绍怎么用Bitmap来实现这些功能。






    一、Bitmap的生成
       
       1.1 BitmapFactory decode出Bitmap
              Bitmap实现在android.graphics包中。
         但是Bitmap类的构造函数是私有的,外面并不能实例化,只能是通过JNI实例化。
        这必然是 某个辅助类提供了创建Bitmap的接口,而这个类的实现通过JNI接口来实例化Bitmap的,
        这个类就是BitmapFactory。
        利用BitmapFactory可以从一个指定文件中,利用decodeFile()解出Bitmap;
        也可以定义的图片资源中,利用decodeResource()解出Bitmap。
        
       1.2 decode时的选项
         在使用方法decodeFile()/decodeResource()时,都可以指定一个BitmapFacotry.Options。
         利用Options的下列属性,可以指定decode的选项:
      inPreferredConfig 指定decode到内存中,手机中所采用的编码,可选值定义在Bitmap.Config中。缺省值是ARGB_8888。
      inJustDecodeBounds 如果设置为true,并不会把图像的数据完全解码,亦即decodeXyz()返回值为null,但是Options的outAbc中解出了图像的基本信息。
      inSampleSize 设置decode时的缩放比例。
         利用Options的这些值就可以高效的得到一幅缩略图。
         先设置inJustDecodeBounds= true,调用decodeFile()得到图像的基本信息[Step#2~4];
         利用图像的宽度(或者高度,或综合)以及目标的宽度,得到inSampleSize值,再设置inJustDecodeBounds= false,
         调用decodeFile()得到完整的图像数据[Step#5~8]。
         先获取比例,再读入数据,如果欲读入大比例缩小的图,将显著的节约内容资源。有时候还会读入大量的缩略图,这效果就更明显了。


    二、利用Bitmap和Matrix实现图像变换


        Bitmap可以和Matrix结合实现图像的剪切、旋转、缩放等操作。
             用源Bitmap通过变换生成新的Bitmap的方法:
        public static Bitmap createBitmap(Bitmap source, int x, int y, intwidth, int height, Matrix m, boolean filter) 
        public static Bitmap createBitmap(Bitmap source, int x, int y, intwidth, int height) 
        public static Bitmap createScaledBitmap(Bitmap src, int dstWidth, int dstHeight,boolean filter)
              第一个方法是最终的实现,后两种只是对第一种方法的封装。
              第二个方法可以从源Bitmap中指定区域(x,y, width, height)中挖出一块来实现剪切;
              第三个方法可以把源Bitmap缩放为dstWidth x dstHeight的Bitmap。
              设置Matrix的Rotate(通过setRotate())或者Scale(通过setScale()),传入第一个方法,可实现旋转或缩放。


    三、保存图像文件


        经过图像变换之后的Bitmap里的数据可以保存到图像压缩文件里(JPG/PNG)。
        这个操作过程中,Bitmap.compress()方法的参数format可设置JPEG或PNG格式;quality可选择压缩质量;fOut是输出流(OutputStream),这里的FileOutputStream是OutputStream的一个子类。
       总结一下,本文介绍Bitmap的使用方法——用Bitmap实现图像文件的读取和写入,并用Bitmap实现图像的剪切、旋转和缩放变换。        
                
                
































     

    展开全文
  • 安卓 Drawable 转 bitmap

    2014-02-13 02:49:21
    Bitmap bitmap = Bitmap.createBitmap(width, height, drawable.getOpacity() != PixelFormat.OPAQUE? Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); drawable....
  • 做了一个保存当前view成bitmap图片的项目,但最终报如下错误,找了半天也找不到解决之法。 --------------------------------- public static Bitmap getBitmapByView(ScrollView scrollView, ...
  • 之前尝试同一个texture ID先后绑定不同bitmap的方法 失败了,显示在屏幕上的还是原来的bitmap。 我想问一下想要更换一个bitmap是否要重新调用以下方法重新生成一个texture?还是有更好的方法? 1. glGenTexture 2. ...
  • BitMap算法

    万次阅读 2017-03-19 22:05:50
    http://blog.csdn.net/pipisorry/article/details/62443757BitMapBitMap从字面的意思,很多人认为是位图,其实准确的来说,翻译成基于位的映射。在所有具有性能优化的数据结构中,大家使用最多的就是hash表,是的,...

    http://blog.csdn.net/pipisorry/article/details/62443757

    BitMap

    BitMap从字面的意思,很多人认为是位图,其实准确的来说,翻译成基于位的映射。

    在所有具有性能优化的数据结构中,大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间,多么的简洁优美。但是数据量大了,内存就不够了。

    当然也可以使用类似外排序来解决问题的,由于要走IO所以时间上又不行。

    所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。

    其实如果你知道计数排序的话(算法导论中有一节讲过),你就会发现这个和计数排序很像。

    bitmap应用

           1)可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下。
           2)去重数据而达到压缩数据

    还可以用于爬虫系统中url去重、解决全组合问题。

    BitMap应用:排序示例

    假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复)。那么我们就可以采用Bit-map的方法来达到排序的目的。要表示8个数,我们就只需要8个Bit(1Bytes),首先我们开辟1Byte的空间,将这些空间的所有Bit位都置为0(如下图:)


    然后遍历这5个元素,首先第一个元素是4,那么就把4对应的位置为1(可以这样操作 p+(i/8)|(0×01<<(i%8)) 当然了这里的操作涉及到Big-ending和Little-ending的情况,这里默认为Big-ending。不过计算机一般是小端存储的,如intel。小端的话就是将倒数第5位置1),因为是从零开始的,所以要把第五位置为一(如下图):


    然后再处理第二个元素7,将第八位置为1,,接着再处理第三个元素,一直到最后处理完所有的元素,将相应的位置为1,这时候的内存的Bit位的状态如下:


    然后我们现在遍历一遍Bit区域,将该位是一的位的编号输出(2,3,4,5,7),这样就达到了排序的目的。

    bitmap排序复杂度分析

    Bitmap排序需要的时间复杂度和空间复杂度依赖于数据中最大的数字。

    bitmap排序的时间复杂度不是O(N)的,而是取决于待排序数组中的最大值MAX,在实际应用上关系也不大,比如我开10个线程去读byte数组,那么复杂度为:O(Max/10)。也就是要是读取的,可以用多线程的方式去读取。时间复杂度方面也是O(Max/n),其中Max为byte[]数组的大小,n为线程大小。

    空间复杂度应该就是O(Max/8)bytes吧

    BitMap算法流程

    假设需要排序或者查找的最大数MAX=10000000(lz:这里MAX应该是最大的数而不是int数据的总数!),那么我们需要申请内存空间的大小为int a[1 + MAX/32]。

    其中:a[0]在内存中占32为可以对应十进制数0-31,依次类推: 
    bitmap表为: 
    a[0]--------->0-31 
    a[1]--------->32-63 
    a[2]--------->64-95 
    a[3]--------->96-127 
    ..........

    我们要把一个整数N映射到Bit-Map中去,首先要确定把这个N Mapping到哪一个数组元素中去,即确定映射元素的index。我们用int类型的数组作为map的元素,这样我们就知道了一个元素能够表示的数字个数(这里是32)。于是N/32就可以知道我们需要映射的key了。所以余下来的那个N%32就是要映射到的位数。

    1.求十进制数对应在数组a中的下标:
    先由十进制数n转换为与32的余可转化为对应在数组a中的下标。

    如十进制数0-31,都应该对应在a[0]中,比如n=24,那么 n/32=0,则24对应在数组a中的下标为0。又比如n=60,那么n/32=1,则60对应在数组a中的下标为1,同理可以计算0-N在数组a中的下标。

    i = N>>K    % 结果就是N/(2^K)

    Note: map的范围是[0, 原数组最大的数对应的2的整次方数-1]。

    2.求十进制数对应数组元素a[i]在0-31中的位m:
    十进制数0-31就对应0-31,而32-63则对应也是0-31,即给定一个数n可以通过模32求得对应0-31中的数。

    m = n & ((1 << K) - 1)      %结果就是n%(2^K)

    3.利用移位0-31使得对应第m个bit位为1

    如a[i]的第m位置1:a[i] = a[i] | (1<<m)

    如:将当前4对应的bit位置1的话,只需要1左移4位与B[0] | 即可。

    Note:  1  p+(i/8)|(0×01<<(i%8))这样也可以?

    2 同理将int型变量a的第k位清0,即a=a&~(1<<k)

    [编程珠玑]

    BitMap算法评价

    优点:
        1. 运算效率高,不进行比较和移位;
        2. 占用内存少,比如最大的数MAX=10000000;只需占用内存为MAX/8=1250000Byte=1.25M。
    缺点:
        1. 所有的数据不能重复,即不可对重复的数据进行排序。(少量重复数据查找还是可以的,用2-bitmap)。

        2. 当数据类似(1,1000,10万)只有3个数据的时候,用bitmap时间复杂度和空间复杂度相当大,只有当数据比较密集时才有优势

    BitMap算法的拓展

    Bloom filter可以看做是对bit-map的扩展。更大数据量的有一定误差的用来判断映射是否重复的算法。[Bloom Filter布隆过滤器]

    皮皮blog



    问题及应用实例

    1 使用位图法判断整形数组是否存在重复
    判断集合中存在重复是常见编程任务之一,当集合中数据量比较大时我们通常希望少进行几次扫描,这时双重循环法就不可取了。
    位图法比较适合于这种情况,它的做法是按照集合中最大元素max创建一个长度为max+1的新数组,然后再次扫描原数组,遇到几就给新数组的第几位置上1,如遇到 5就给新数组的第六个元素置1,这样下次再遇到5想置位时发现新数组的第六个元素已经是1了,这说明这次的数据肯定和以前的数据存在着重复。这种给新数组初始化时置零其后置一的做法类似于位图的处理方法故称位图法。它的运算次数最坏的情况为2N。如果已知数组的最大值即能事先给新数组定长的话效率还能提高一倍。

    2 在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数

    解法一:将bit-map扩展一下,采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)进行,共需内存2^32 * 2 bit=1 GB内存,还可以接受。然后扫描这2.5亿个整数,查看Bitmap中相对应位,如果是00变01,01变10,10保持不变。所描完事后,查看bitmap,把对应位是01的整数输出即可。

    [c++直接实现代码大数据:查找不重复的整数 ]

    或者我们不用2bit来进行表示,我们用两个bit-map即可模拟实现这个2bit-map,都是一样的道理。

    解法二:也可采用与第1题类似的方法,进行划分小文件的方法。然后在小文件中找出不重复的整数,并排序。然后再进行归并,注意去除重复的元素。

    解法三:(lz)类似解法2,只是划分时按照快排partition一样划分,直到划分到每个块都可以放入内存中。

    [c实现]

    2.1 一个序列里除了一个元素,其他元素都会重复出现3次,设计一个时间复杂度与空间复杂度最低的算法,找出这个不重复的元素。


    3  已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。

    8位最多99 999 999,大概需要99m个bit,大概10几m字节的内存即可。 (可以理解为从0-99 999 999的数字,每个数字对应一个Bit位,所以只需要99M个Bit==1.2MBytes,这样,就用了小小的1.2M左右的内存表示了所有的8位数的电话)

    lz觉得这个是应该用计数排序类似的算法吧,而不是bitmap?

    4 给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?

     解析:bitmap算法就好办多了。申请512M的内存,一个bit位代表一个unsigned int值,读入40亿个数,设置相应的bit位;读入要查询的数,查看相应bit位是否为1,为1表示存在,为0表示不存在。

    Note: unsigned int最大数为2^32 - 1,所以需要2^32 - 1个位,也就是(2^32 - 1) / 8 /10 ^ 9G = 0.5G内存。

        逆向思维优化:usinged int只有接近43亿(unsigned int最大值为232-1=4294967295,最大不超过43亿),所以可以用某种方式存没有出现过的3亿个数(使用数组{大小为3亿中最大的数/8 bytes}存储),如果出现在3亿个数里面,说明不在40亿里面。3亿个数存储空间一般小于40亿个。(xx存储4294967296需要512MB, 存储294967296只需要35.16MBxx)

    5 给定一个数组a,求所有和为SUM的两个数。

    如果数组都是整数(负数也可以,将所有数据加上最小的负数x,SUM += 2x就可以了)。如a = [1,2,3,4,7,8],先求a的补数组[8,7,6,5,2,1],开辟两个数组b1,b2(最大数组长度为SUM/8/2{因为两数满足和为SUM,一个数<SUM/2,另一个数也就知道了},这样每个b数组最大内存为SUM/(8*2*1024*1024) = 128M),使用bitmap算法和数组a分别设置b1b2对应的位为1,b1b2相与就可以得到和为SUM的两个数其中一个数了。


    皮皮blog



    BitMap的实现

    Python

    lz写的一个比较好的实现

    import os, sys, array
    
    CWD = os.path.split(os.path.realpath(__file__))[0]
    sys.path.append(os.path.join(CWD, '../..'))
    
    
    def power2n(x):
        '''
        求比x大且是2n次方的数
        '''
        for i in (1, 2, 4, 8, 16, 32):  # 支持到64int型,加上64则可以支持到128等等
            x |= x >> i
        # print(x + 1)
        return x + 1
    
    
    class BitMap():
        def __init__(self):
            self.K = 5
            self.BIT_NUM = 1 << self.K
            self.BIT_TYPE = 'I'  # 32unsighed int存储位。note:可能8char存储对小数据更好一丢丢
            self.shift = 0  # 如果数组中有<0的数,则所有数都要减去最小的那个负数
    
        def fit(self, x):
            '''
            将数据读入bitmap中存储
            '''
            MIN_NUM = min(x)
            if MIN_NUM < 0:
                self.shift = -MIN_NUM  # 如果数组中有<0的数,则所有数都要减去最小的那个负数
                x = [i + self.shift for i in x]
            else:
                self.shift = 0
            MAX_NUM = max(x)
    
            num_int = power2n(MAX_NUM) >> self.K
            num_int = num_int if num_int > 0 else 1  # 至少应该有一个数组
            # print(num_int)
            self.a = array.array(self.BIT_TYPE, [0] * num_int)
            for xi in x:
                self.set(xi)
    
        def set(self, xi, value=1):
            '''
            设置数xi在数组a中对应元素对应的位为1
            '''
            array_ix = xi >> self.K  # 数组的元素位置(0开始)
            bit_ix = xi & ((1 << self.K) - 1)  # 数组元素中的bit位置(0开始),取模
            if value == 1:
                self.a[array_ix] |= 1 << bit_ix  # 对应的第bit_ix位置的2**bit_ix1
            else:
                self.a[array_ix] &= ~((1 << bit_ix))  # 对应的第bit_ix位置的2**bit_ix0
    
        def show_array(self):
            for ai in self.a:
                print('{:032b}'.format(ai))  # bin(ai)
    
        def search(self, xi):
            '''
            bitmap查找
            '''
            if self.shift != 0:
                xi += self.shift
    
            array_ix = xi >> self.K
            bit_ix = xi & ((1 << self.K) - 1)
            if (self.a[array_ix] & (1 << bit_ix)):
                flag = True
            else:
                flag = False
            return flag
    
        def sort(self):
            '''
            bitmap排序
            '''
            sorted_x = []
            for array_ix, ai in enumerate(self.a):
                for bit_ix in range(self.BIT_NUM):
                    # 首先得到该第j位的掩码(0x01<<j),将内存区中的,位和此掩码作与操作。最后判断掩码是否和处理后的结果相同
                    if (ai & (1 << bit_ix)) == (1 << bit_ix):
                        sorted_x.append(self.BIT_NUM * array_ix + bit_ix)
            # print(sorted_x)
            if self.shift != 0:
                sorted_x = [i - self.shift for i in sorted_x]
            return sorted_x
    
    
    def test():
        bm = BitMap()
        bm.fit([-3, -44, 7, 2, 5, 3, 32])
        bm.show_array()
        print(bm.search(7))
        print(bm.search(6))
        print(bm.sort())
    
    
    test()

    00000000000000000000000000000001
    00000000000010101100001000000000
    00000000000000000001000000000000
    00000000000000000000000000000000
    True
    False

    [-44, -3, 2, 3, 5, 7, 32]

    Python package[bitsets 0.7.9]

    Python 实现类似C++的bitset类:[Python 实现类似C++的bitset类 ]

    C/C++

    c++有bitset模块

    也可以自己实现:[海量数据处理算法—Bit-Map ]

    Java

    其实某些语言是对BitMap算法进行了封装的,比如java中对应BitMap的数据结构就有BitSet类。其使用方法相当简单,看看API就ok,还是给个例子吧:
    import java.util.BitSet;
    public class Test{
        public static void main(String[] args) {
            int [] array = new int [] {1,2,3,22,0,3};
            BitSet bitSet  = new BitSet(6);
            //将数组内容组bitmap
            for(int i=0;i<array.length;i++)
            {
                bitSet.set(array[i], true);
            }
           System.out.println(bitSet.size());
            System.out.println(bitSet.get(3));
        }
    }
    对应的bit位如果有对应整数那么通过bitSet.get(x)会返回true,反之false。其中x为BitMap位置下标。

    [java.util.BitSet代码实现]

    from: http://blog.csdn.net/pipisorry/article/details/62443757

    ref:  [经典算法题每日演练——第十一题 Bitmap算法]

    [经典算法系列之(一) - BitMap]


    展开全文
  • public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩...
  • 在listview的adapter中 加载...在getview的最后执行上面的函数时产生错误ava.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@2cc96c28 想请教一个这里的问题要如何解决?
  • file转bitmap File param = new File(); Bitmap bitmap= BitmapFactory.decodeFile(param.getPath()); drawable转bitmap Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.mipmap.jcss_03 .....

    file转bitmap

    File param = new File();

     

    Bitmap bitmap= BitmapFactory.decodeFile(param.getPath());

    drawable转bitmap

     

    Bitmap    bmp = BitmapFactory.decodeResource(getResources(),R.mipmap.jcss_03 );

    url转bitmap

     

    Bitmap bitmap;
    public Bitmap returnBitMap(final String url){
    
        new Thread(new Runnable() {
            @Override
            public void run() {
                URL imageurl = null;
    
                try {
                    imageurl = new URL(url);
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
                try {
                    HttpURLConnection conn = (HttpURLConnection)imageurl.openConnection();
                    conn.setDoInput(true);
                    conn.connect();
                    InputStream is = conn.getInputStream();
                    bitmap = BitmapFactory.decodeStream(is);
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    
        return bitmap;
    }

     

    方法二:

    public Bitmap getBitmap(String url) {
        Bitmap bm = null;
        try {
            URL iconUrl = new URL(url);
            URLConnection conn = iconUrl.openConnection();
            HttpURLConnection http = (HttpURLConnection) conn;
    
            int length = http.getContentLength();
    
            conn.connect();
            // 获得图像的字符流
            InputStream is = conn.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(is, length);
            bm = BitmapFactory.decodeStream(bis);
            bis.close();
            is.close();// 关闭流
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return bm;
    }

     

    可配合前台线程显示

     

    private Handler mHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
                case REFRESH_COMPLETE:
                    myheadimage.setImageBitmap(bitmap);//显示
                    break;
            }
        }
    };
    String imageUrl = "http://www.pp3.cn/uploads/201511/2015111212.jpg";
    bitmap= returnBitMap(imageUrl);
    mHandler.sendEmptyMessageDelayed(REFRESH_COMPLETE, 1000);

    bitmap转file

    private  String SAVE_PIC_PATH = Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)
            ? Environment.getExternalStorageDirectory().getAbsolutePath() : "/mnt/sdcard";//
    
    private  String SAVE_REAL_PATH = SAVE_PIC_PATH + "/good/savePic";//保存的确

     

    saveFile(bmp, System.currentTimeMillis() + ".png");
      //保存方法
        private void saveFile(Bitmap bm, String fileName) throws IOException {
            String subForder = SAVE_REAL_PATH;
            File foder = new File(subForder);
            if (!foder.exists()) foder.mkdirs();
    
            File myCaptureFile = new File(subForder, fileName);
            Log.e("lgq","图片保持。。。。wwww。。。。"+myCaptureFile);
            ends = myCaptureFile.getPath();
            if (!myCaptureFile.exists()) myCaptureFile.createNewFile();
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
            bm.compress(Bitmap.CompressFormat.JPEG, 100, bos);
            bos.flush();
            bos.close();
    //        ToastUtil.showSuccess(getApplicationContext(), "已保存在/good/savePic目录下", Toast.LENGTH_SHORT);
            //发送广播通知系统
            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
            Uri uri = Uri.fromFile(myCaptureFile);
            intent.setData(uri);
            this.sendBroadcast(intent);
        }

    bitmap与byte[]之间相互转换

     

    Android 图片压缩,bitmap与byte[]之间相互转换:https://blog.csdn.net/meixi_android/article/details/89921090

    展开全文
  • bitmap.compress(Bitmap.CompressFormat.PNG,imageLength,baos); } bitmap.compress(Bitmap.CompressFormat.PNG,100, baos); baos.flush(); baos.close(); byte[] bitmapBytes = baos.toByteArray(); result...
  • foxit::common::Bitmap bitmap; bitmap = image_object->CloneBitmap(page); byte* buffer = (byte*)bitmap.GetBuffer(); BITMAPINFO bmpInfo; //创建位图 bmpInfo.bmiHeader.biSize = sizeof...
  • 使用Bitmap.createBitmap遇到的问题

    千次阅读 2013-03-26 11:59:57
    Bitmap.java中createBitmap函数调用的是以下重构方法 public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter) { checkXYSign(x, y);
  • bitmap的createBitmap

    2016-10-12 15:42:35
    可以对bitmap操作1.public static Bitmap createBitmap (Bitmap src) 从原位图src复制出一个新的位图,和原始位图相同2.public static Bitmap createBitmap (int[] colors, int width, int height, Bitmap.Config ...
  • Bitmap bm = (Bitmap) data.getExtras().get("data"); TakePictureActivity.bm=bm; SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 File myCaptureFile = new File(...
  • public DrawBitmapView(Context context,int width,int height,Bitmap bitmap) { super(context); initPaint(); mBitWidth = width; mBitHeight = height; mBitmap = bitmap; mSrcRect = new Rect(0,0,...
  • 在网上查了一下这个方法可以把base64转换成Bitmap, public static Bitmap stringToBitmap(String string) { byte[] bytes = Base64.decode(string, Base64.DEFAULT); Bitmap bitmap=BitmapFactory....
  • public static Bitmap getMutableBitmap(Bitmap bitmap)  {  if(bitmap == null || bitmap.isMutable())  {  return bitmap;  }    try {  File file = new File(AppConstants.SDCARD_PATH+"/mutab
  • 我想从文件中读取一张图片,然后将它转化为bitmap类型,但是显示bitmap 里面宽和高都为0,还有一个result包含读取的image信息 ![图片说明](https://img-ask.csdn.net/upload/201905/05/1557019904_941078.png) ...
  • Bitmap createBitmap 相关参数

    万次阅读 2018-04-27 15:24:57
    (一) Bitmap方法相关参数:(1) Bitmap createBitmap (Bitmap src)从原位图src复制出一个新的位图,和原始位图相同(2) Bitmap createBitmap (int width, int height, Bitmap.Config config)根据参数创建新位图int ...
  • File tempFile = null;... Bitmap bitmap = BitmapUtils.createThumbnail(imagePath, 1080, 1080 * 1920); if (bitmap != null) { Bitmap tmp = BitmapUtils.rotateImg(BitmapUtils.getOrientati
  • android之BitMap

    千次阅读 2012-03-06 21:22:14
    android 中的 Bitmap 相关 1.Bitmap转Drawable //xxx根据你的情况获取 Bitmap bitmap=xxx; //BitmapDrawable bitmapDrawable=BitmapDrawable(bitmap);(被弃用,原因是:不能确定drawable已经设置了...
  • Android Bitmap 变色

    千次阅读 2015-06-09 17:56:41
    一张图是 a*b 像素, 即有 a*b个像素点 ...private Bitmap sharkColor(Bitmap mBitmap) {  int mBitmapWidth = mBitmap.getWidth();  int mBitmapHeight = mBitmap.getHeight();  int mArrayColorL
  • 我使用下面的方法来检索一个bitmap: private Bitmap getBitmap(String url) { File f=fileCache.getFile(url); //from SD cache if(b!=null) return b; //from web try { Bitmap bitmap=null;...
  • 我是在onDraw当中绘制一个动画使一个Bitmap对象同时旋转和移动,于是就使用matrix,matrix完就马上执行Bitmap.createBitmap()方法生成一个新的bitmap并invalidate()通知onDraw重新绘制,但是发觉log中的GC相当的频繁...
  • </bitmap> the back.xml <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> </item> layout.xml android:id="@+id/frame1" android:...
  • Bitmap myBitmap = myBmpFromURL.getMyBitmap(); map.put("img",myBitmap); mylist.add(map); } }catch(JSONException e) { Log.e("log_tag", "Error parsing data "+e.toString()); } ...
  • Gdiplus::Bitmap *bmp = Gdiplus::Bitmap.FromFile("./charater1.png"); 报错 1>g:\c++pro\ddrawinit\ddrawinit\ddrawinit.cpp(271): warning C4832: 标记“.”在 UDT“Gdiplus::Bitmap”之后是非法的 1> c:\...
  • bitmap = Bitmap.createBitmap(source, vListView.getWidth(), 0, width, height - hListView.getHeight()); 日志也看一下: 11-01 11:00:31.419: I/System.out(1658): vListView :- 60 11-01 11:00:31....
  • bitmap与2bitmap实现

    千次阅读 2013-06-04 21:06:28
    Bitmap就是用一个bit位来标记某个元素是否存在,而2Bitmap就是用两个bit为来标记某个元素的个数,00,01,10,11(分别表示0,1,2,3,0表示不存在,1表示存在1次,后面依次)。 Bitmap能用来处理下面的两个问题:...

空空如也

1 2 3 4 5 ... 20
收藏数 48,267
精华内容 19,306
关键字:

bitmap