bitmap文件(相册访问的路径如何转成bitmap)

本文目录
- 相册访问的路径如何转成bitmap
- BMP 文件格式
- Bitmap的内存占用和Bitmap加载优化
- bitmap缩放到指定大小-android中怎么是bitmap缩小
- bitmap. conf是什么文件
- 什么是bitmap文件
- bitmap缩小-图片压缩的三种方式
- $bitmap是什么文件
- bmp是什么格式的文件
- Bitmap使用详解
相册访问的路径如何转成bitmap
1、进入我速PDF转换器官网。
2、下载安装完成后,打开软件,选择android图片路径转bitmap。
3、点击或者拖拽你想要转换的批量PDF文件或者点击界面下方添加文件夹,输出目录可以选择原文件目录或者自定义目录,最后点击开始转换即可完成转换。
BMP 文件格式
BMP 取自 Bitmap 的缩写。BMP 文件格式,也被称为位图图像文件或设备无关位图(DIB, device independent bitmap)的文件格式或简称为位图(bitmap),是一个用于存储位图数字图像的文件格式,独立于的显示装置,尤其是在 Microsoft Windows 和 OS/2 操作系统上。文件扩展名为.bmp, Windows GDI API 内部使用的 DIB 数据结构(.dib)与 BMP 文件格式几乎相同。
BMP 文件格式能够存储各种颜色深度的单色和彩色二维数字图像,并且可以选择存储数据压缩,alpha 通道和颜色配置文件。在 Windows Metafile(WMF) 规范中涵盖了 BMP 格式的文件。
位图图像文件由固定大小的结构(文件头)以及以预定顺序出现的可变大小的结构体组成。由于该文件格式几经演进,这些结构体的版本也很多。
参考上图,位图文件由以下结构依次构成:
这部分数据块位于文件开头,共 14 字节,用于进行文件的识别。典型的应用程序会首先普通读取这部分数据以确保的确是位图文件并且没有损坏。所有的整数值都以小端序(little-endian)存放(即最低有效位前置)。
这部分告诉应用程序图像的详细信息,在屏幕上显示图像将会使用这些信息,它从文件的第15个字节开始。
这部分数据块对应了Windows和OS/2中的内部使用的头结构以及其它一些版本的变体。但所有版本均以一个DWORD位(32位)开始,用以说明该数据块的大小,使得应用程序能够根据这个大小来区分该图像实际使用了哪种版本的DIB头结构。
存在多种版本的头结构的原因是微软对DIB格式进行过多次扩展。下表即为所有不同版本的DIB头:
BITMAPCOREHEADER之后的版本都只是在前一版本结构末尾追加字段。
下面我们对比较常见的两个版本进行说明
DIB 头从地址 0x0E 开始,下面列出 BITMAPCOREHEADER 版本的 DIB 头。除非有特殊说明,其中所有值均为无符号整数。
注意:
出于兼容性的考量,大多数应用程序使用较旧版本的DIB头保存文件。由于 Windows 2000 之后不再支持 OS/2, 因此目前常见的Windows格式是 BITMAPINFOHEADER 标头。下表对其进行说明,除非有特殊说明,其中所有值均为无符号整数。
压缩方法(字节 0x1E ~ 0x21)的有效值如下表所示:
注意:BI_JPEG和BI_PNG仅对打印机驱动有效,不支持屏幕渲染。
此项仅在DIB头是BITMAPINFOHEADER且Compression Method成员设置为BI_BITFIELDS或BI_ALPHABITFIELDS的情况下存在。
见本文的最后部分
这部分定义了图像中所用的颜色。如上所述,位图图像一个像素接着一个像素储存,每个像素使用一个或者多个字节的值表示,所以调色板的目的就是要告诉应用程序这些值所对应的实际颜色。
调色板的条目数为 (n为 DIB 头中指定的的每个像素所占位数) 或 DIB 头中指定的调色板的颜色数。
典型的位图文件使用RGB彩色模型。大多数情况下,调色板的每个条目占 4 个字节,按顺序表示 蓝色、绿色、红色、0x00。每个条目的格式如下:
其中,第四个字节一般没有使用(大多数应用程序将它设为0),也有些应用程序将第四个字节作为 alfa 通道使用。
调色板是一个字节块(一个表),列出了图像使用的颜色。对于索引型的位图(每个像素所占位数为1、4 或 8),调色板的作用是告诉应用程序,像素的实际颜色,此时,像素点存储的值为此调色板中此像素颜色的索引,根据索引得到像素点真实的颜色。对于非索引型的位图,调色板的作用是列出位图中使用的颜色,以优化具有有限颜色显示功能的设备,并便于将来转换为不同的像素格式和着色。
如上所述,当像素采用每像素16位或更高时,通常不使用调色板。
位图中的像素是以行为单位进行存储的,每一行再存储时都以 4 字节对齐,即每一行的大小都向上取整为 4 字节(32 位 DWORD)的倍数。如果图像的高度大于 1, 多个经过填充实现对齐的行就形成了像素数组。
所以存储一行像素所需的字节数,可以通过以下公式计算:
RowSize单位为字节,ImageWidth单位为像素;注意公式中的特殊括号,表示向上、向下取整
像素阵列是一个32位DWORD块,它逐像素描述图像,每个像素使用 1 个或多个自己表示。
通常,像素是从下到上、从左到右保存的。但如果使用的不是 BITMAPCOREHEADER, 那么未压缩的 Windows 位图还可以从上到下存储,此时图像高度为负值。
每一行的末尾通过填充若干个字节的数据(并不一定为0)使该行的长度为4字节的倍数。像素数组读入内存后,每一行的起始地址必须为4的倍数。这个限制仅针对内存中的像素数组,针对存储时,仅要求每一行的大小为4字节的倍数,对文件的偏移地址没有限制。
例如:对于24位色的位图,如果它的宽度为1像素,那么除了每一行的数据(蓝、绿、红)需要占3字节外,还会填充1字节;而如果宽为2像素,则需要2字节的填充;宽为3像素时,需要3字节填充;宽为4像素时则不需要填充。
此处的单位 bbp 为 (bit/pixel), 位每像素
为了解决哪些位定义了哪些样本的歧义,DIB标头提供了某些默认值以及特定的BITFIELDS,它们是位掩码,用于定义像素中特定位组到特定通道的成员资格。下图定义了此机制:
BITFIELDS位掩码定义的样本字段必须是连续且不重叠的,但是样本字段的顺序是任意的。最普遍的场序是:Alpha,Blue,Green,Red(MSB到LSB)。仅当DIB标头的Compression成员设置为BI_BITFIELDS时,红色,绿色和蓝色位掩码才有效。只要在DIB标头中存在或将DIB标头的Compression成员设置为BI_ALPHABITFIELDS (仅Windows CE),alpha位掩码就有效。
使用画图软件绘制图像为 bmp 格式,下面是一些例子:
这后面有一个很小的BMP单色图
放大后显示为:
其文件内容为(全部以16进制表示):
对其进行解析:
这后面有一个很小的 BMP 16色图
放大后显示为:
其文件内容为(全部以16进制表示):
对其进行解析:
这后面有一个很小的 BMP 256色图
放大后显示为:
其文件内容为(全部以16进制表示):
Bitmap的内存占用和Bitmap加载优化
内存占用
首先要清楚Bitmap的文件大小肯定不是实际的内存加载大小。因为文件只是存储的信息,加载到内存中显示出来时还需要经过转换。
获取运行的时的内存占用:
针对Bitmap位图对象,Android的系统框架中的graphics包下的Bitmap类。有bitmap.getByteCount()方法获取内存大小,单位字节(byte)
其实本质上Bitmap的内存占用计算非常简单:
基本公式:总内存=宽×高×色彩空间
但是在实际运行中不是这么简单,公式的每个参数都会有被不同因素影响。
影响内存大小的三要素
1. 图片宽高:这个不用解释
2. 色彩空间 :即Bitmap.Config枚举:ARGB_8888:总共32位(4byte),分别对应4个数值,数值单位为8bit位=1byte字节,分别描述透明度(1个)+RGB通道(3个)。每个字节数值范围0-255。作为Bitmap配置色彩空间的默认值。BitmapFactory加载时默认。
public Bitmap.Config inPreferredConfig = Bitmap.Config.ARGB_8888
RGB_565
总共16位(2byte),分别对应3个数值,5位(红)+6位(绿)+5位(蓝)分别描述RGB通道。Glide加载时默认使用,DecodeFormat类
public static final DecodeFormat DEFAULT = PREFER_RGB_565
可以看到,RGB_565只需要ARGB_8888的一半大小,代价是没有透明度描述。
3. 缩放比 :对图片原始宽高的缩放设置认定为缩放比。
主动设置:
在解析Bitmap时,有个可选的Options对象,其中inSampleSize参数可以影响缩放比的结果。当使用该参数值时要求大于1且是2的倍数,比如在inSampleSize=2时,缩放比被缩小2倍(该功能只有缩小没有放大的可能),即“缩放比=原始缩放比×(1/2)”。对内存结果的影响是缩小4倍,因为宽/高都被缩小2倍。该值默认不生效,需要手动设置。
被动设置:
在系统中主要由,具体运行设备dpi的和图片文件存储的drawable文件dpi层级决定。 首先要引出屏幕密度概念。这是Android为应对众多的不同的屏幕分辨率色设备提出的概念和单位。
drawable文件的dpi层级:在Drawable系列文件中保存的Bitmap位图文件。根据Android开发的规范,Drawable的系列文件中的修饰符后命名是有意义的,声明了这个文件所属的Dpi(屏幕密度)层级。文件众多也对应了众多的Android设备屏幕密度。
设备的dpi层级:参考 material.io/devices/ 可以了解。
设备和drawable文件的dpi缩放比计算:
比如drawable-xhdpi(320=2*160=2*mdpi)下的bitmap被加载到xxxhdpi(640=4*160=4*mdpi)的Pixel-XL中。
dpi缩放比=设备dpi/drawable的dpi,所以上面的,dpi缩放比=640/320=2。
实际意义就是在高分辨率的xxxhdpi设备中,drawable-xhdpi文件需要放大2倍,即宽高各放大2倍来适应高密度设备。(假设没有缩放就会图小控件大)。需要指出的是如果Bitmap文件保存在drawable没有后缀的文件中,系统会使用drawable的dpi默认值就是160;
最终公式
基于以上认识,丰富上文的基本公式,可以的得到最终的计算Bitmap内存公式
最终公式:总内存=(原始宽×缩放比)×(原始高×缩放比)×色彩空间
举个例子:
原图:1000宽X447高,位于drawable-xxhdpi(480dpi=3*160dpi)文件包,设备Pixel-XL(560dpi=3.5*160dpi)。主动设置inSampleSize=2。使用默认Bitmap.Config=ARGB_8888
缩放比=主动设置×被动设置=1/2×(560/480)=0.5×1.166=0.5833
色彩空间=ARGB_8888=32bit=4byte
原始大小=1000×447
内存占用=(原始宽×缩放比)×(原始高×缩放比)×色彩空间
=1000×0.5833×447×0.5833×4
=583×260×4
=606320byte
≈0.578MB
启示
理解Bitmap的最终内存占用计算原理和内存占用各个参数,我们对Bitmap的处理时就有具体的目标。比如常见的优化Bitmap加载过程,其实就是对Bitmap加载时的各个变量参数设置修改。 常见的Bitmap优化:
修改缩放比:目标是修改最终图片加载的宽高,进而优化内存占用。具体就是设置inSampleSize值,如在适当的View上缩放显示适合的bitmap,实现bitmap的高效加载(Glide图片框架就是这样,让显示组件View的宽高的参与缩放比计算)。
修改色彩空间:在明确的不需要透明度的情况,使用RGB_565替换ARGB_8888,可以直接达到内存缩小一半的功效。缺点就是有限定条件。(从网络上的博文描述,不推荐使用ARGB_4444替换,因为这样的图片质量太差)
***隐藏网址***
bitmap缩放到指定大小-android中怎么是bitmap缩小
如何对图片进行缩放到适应屏幕大小呀
/**显示图片,使用BitmapFactory()*path
*图片SD卡路径****/
privatevoidshow_Image(Stringpath){
//TODOAuto-generatedmethodstub
opts=new();
=2;//宽高设置成原来的1/2
Bitmapbit=newBitmapFactory().decodeFile(path,opts);
show_(bit);
还有很多属性,你去查查吧,另外如果非要适应屏幕大小的话,你还需要获取屏幕的大小,然后图片大小跟屏幕大小比较,没弄过一定要图片跟屏幕大小填充满的,就算填充满,一定也会失真
android中怎么是bitmap缩小/**Bitmap放大的方法*/
privatestaticBitmapbig(Bitmapbitmap){
Matrixmatrix=newMatrix();
(1.5f,1.5f);//长和宽放大缩小的比例
BitmapresizeBmp=(bitmap,0,0,(),(),matrix,true);
returnresizeBmp;
}
这里放大缩小的方法都有:
android缩放和压缩的区别android缩放和压缩图片可以如下解释:
压缩图片
这里简单的将一个图片文件转换为Bitmap,并且在转换的过程中对图片质量进行简单压缩:
(,intquality,FileOutputStreamfos);
注意这里的quality的范围为0~100,经过测试如果这个值设置比较低的话图片会非常不清晰,基本不可用,0~100的值可以参考类似Photoshop之类输出图片时选择的图片质量.
此方法只是单纯对图片质量进行处理,并不会改变其大小,如果需要改变图片文件的大小,最好是使用缩放,这个可以在保证一定的图片清晰度的情况下减少了图片大小,毕竟手机屏幕就那么点,你把2000px*1000px的图片改为500px*250px在手机用户看来也不会有太严重的不适感,而如果你只设置图片的quality想来改变文件大小,你最后会发现得到的是一个2000px*1000px的几个色块.
缩放图片
先提代码看看:
viewplaincopy
/**
*保持长宽比缩小Bitmap
*
*@parambitmap
*@parammaxWidth
*@parammaxHeight
*@return
*/
publicBitmapresizeBitmap(Bitmapbitmap,intmaxWidth,intmaxHeight){
intoriginWidth=();
intoriginHeight=();
//noneedtoresize
if(originWidth《maxWidth&&originHeight《maxHeight){
returnbitmap;
}
intwidth=originWidth;
intheight=originHeight;
//若图片过宽,则保持长宽比缩放图片
if(originWidth》maxWidth){
width=maxWidth;
doublei=originWidth*1.0/maxWidth;
height=(int)(originHeight/i);
bitmap=(bitmap,width,height,false);
}
//若图片过长,则从上端截取
if(height》maxHeight){
height=maxHeight;
bitmap=(bitmap,0,0,width,height);
}
//Log.i(TAG,width+"width");
//Log.i(TAG,height+"height");
returnbitmap;
}
这里演示是将图片缩小到一个max范围内,而不是直接将变成硬性的变成某个尺寸的图片,因为一般来说这种设置max的方式符合大部分需要,如果必须将图片变成某个指定尺寸可以直接使用方法,也是下面要介绍的.
此函数主要就是使用了Bitmap的两个静态方法,一个是:
publicstaticBitmapcreateScaledBitmap(Bitmapsrc,intdstWidth,intdstHeight,booleanfilter)
此方法就会把一个Bitmap图片缩放成指定的尺寸.
bitmap. conf是什么文件
Bitmap.Config 表示图片像素类型,包括ALPHA_8、RGB_565、ARGB_4444、ARGB_8888
其中 A表示透明度;RGB分别是Red、Green、Blue,三种原色
1.在不考虑屏幕分辨率和res文件夹分辨率的情况下:
一张图片(BitMap)占用的内存=长 * 宽 * 每个像素点的大小
例如:一张图片宽1080 ,高 452
那么,这张图片的大小按照这个公式应该是:1080 * 452 * 4B = 1952640B ≈ 1.86MB
2.考虑屏幕分辨率和res文件夹分辨率的情况下:
系统在加载 res 目录下的资源图片时,会根据图片存放的不同目录做一次分辨率的转换。
新长 = 原长 * (设备的 dpi / 目录对应的 dpi )
新宽 = 原宽 * (设备的 dpi / 目录对应的 dpi )
一张图片(BitMap)占用的内存= 新长 * 新宽 * 每个像素点的大小
什么是bitmap文件
分类: 电脑/网络 》》 操作系统/系统故障
解析:
BIT是位 MAP是图,合起来就是位图~这种格式与等文件想区别的是他不是那种压缩格式,没有牺牲图象的质量,而与PNG等矢量文件相比他就是记录了一张图片里每个“点”的信息,如一个点的颜色,深浅等,而JPG就是压缩了相近的颜 *** 域而减少了文件大小~而PNG文件呢,就是说他记录的“线”的信息,如一个正方形是4个边组成,每个边是什么颜色的?这个正方形是什么颜色的,等等信息,而不是如实的去记录这个正方形上的每个的点的信息~
bitmap缩小-图片压缩的三种方式
android中怎么是bitmap缩小
/**Bitmap放大的方法*/
privatestaticBitmapbig(Bitmapbitmap){
Matrixmatrix=newMatrix();
(1.5f,1.5f);//长和宽放大缩小的比例
BitmapresizeBmp=(bitmap,0,0,(),(),matrix,true);
returnresizeBmp;
}
这里放大缩小的方法都有:
Bitmap改变大小用StretchBlt可以放大或缩小bitmap
TheStretchBltfunctioncopiesabitmapfromasourcerectangleintoadestinationrectangle,stretchingorcompressingthebitmaptofitthedimensionsofthedestinationrectangle,ifnecessary.Thesystemstretchesorcompressesthebitmapaccordingtothestretchingmodecurrentlysetinthedestinationdevicecontext.
BOOLStretchBlt(
HDChdcDest,//handletodestinationDC
intnXOriginDest,//x-coordofdestinationupper-leftcorner
intnYOriginDest,//y-coordofdestinationupper-leftcorner
intnWidthDest,//widthofdestinationrectangle
intnHeightDest,//heightofdestinationrectangle
HDChdcSrc,//handletosourceDC
intnXOriginSrc,//x-coordofsourceupper-leftcorner
intnYOriginSrc,//y-coordofsourceupper-leftcorner
intnWidthSrc,//widthofsourcerectangle
intnHeightSrc,//heightofsourcerectangle
DWORDdwRop//rasteroperationcode
);
图片压缩的三种方式1、等比压缩,等比压缩是保持原图长宽比例的压缩,只是图片变小,展示的还是原图的所有内容(区别于第二种通过Matrix压缩,可以选取图片的一部分,类似于上传头像时,让你在图上选一块zoom的形式)。等比压缩用的的主要是,通过options缩放比例的设置,来生成缩略图:
2、通过Matrix进行更加灵活的缩放:这种方式主要是通过构建缩放矩阵和方法来实现灵活缩放,宽和高缩放的比例可以不一致,而且通过方法创建出来的是新的位图,这个位图可以是选取原图的一部分,而不是对原图进行整体缩放!类似于上传头像时,让你在原图上扣下来一块的效果,控制非常灵活。
3、无损压缩,无损压缩是说图片大小和清晰度看上去和原图没有什么差别,但是确实size缩小了,这里缩小的原理是牺牲了分辨率等其他直观看不到的东西,看起来和原图一样,但是一放大就立马失真了,不会和原图一样放大很多才会逐渐变得不清晰。无损压缩后的图片像素并不会减少,而Bitmap占用内存的定义就是像素点占的内存,所以以Bitmap的方式加载到内存中时,和压缩前占用的内存是同样大的,原来会oom的图片,质量压缩后同样会oom;但是,质量压缩后将流输出到文件中,文件的size会大幅度减小,所以质量压缩特别适合在Android端进行图片上传的时候进行图片压缩,既能保持上传后的清晰度,又能减小size。另外质量压缩不是可以无限缩小的,降低到一定程度,就算把quality设置的再小,size也不会再降低了。另外这种方式最好返回保存压缩后的图片保存的文件路径,而不要直接返回Bitmap,示例就懒得改了。
一张图片处理过程,建议先进行等比压缩或者Matrix压缩后,再进行质量压缩,这样组合使用,不管是生成缩略图还是图片上传,效果都不错
$bitmap是什么文件
位图文件($Bitmap)。NTFS卷的分配状态都存放在位图文件中,其中每一位(bit)代表卷中的一簇,标识该簇是空闲的还是已被分配了的,由于该文件可以很容易的被扩大,所以NTFS的卷可以很方便的动态的扩大,而FAT格式的文件系统由于涉及到FAT表的变化,所以不能随意的对分区大小进行调整。
引用 网页链接
bmp是什么格式的文件
BMP(全称Bitmap)是Window操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。
它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩坦誉渣,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。
注意事项:
BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件让悄格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持虚册BMP图像格式。
bmp是什么意思
BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。
随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所当然地被广泛应用。
这种格式的特点是缺迹包含的图像信息较丰链扮弊富,几乎不进行压缩,但由此导致了它与生俱来棚族的缺点--占用磁盘空间过大。
所以,BMP在单机上比较流行。
Bitmap使用详解
用到的图片不仅仅包括.png、.gif、.9.png、.jpg和各种Drawable系对象,还包括位图Bitmap
图片的处理也经常是影响着一个程序的高效性和健壮性。
为什么不直接用Bitmap传输?
位图文件虽好,但是非压缩格式,占用较大存储空间。
Bitmap主要方法有:获取图像宽高、释放,判断是否已释放和是否可修改,压缩、创建制定位图等功能
用于从不同的数据源(如文件、输入流、资源文件、字节数组、文件描述符等)解析、创建Bitmap对象
允许我们定义图片以何种方式如何读到内存。
推荐阅读: Android - Bitmap-内存分析
注意事项:
decodeFileDescriptor比decodeFile高效
查看源码可以知道
替换成
建议采用decodeStream代替decodeResource。
因为BitmapFactory.decodeResource 加载的图片可能会经过缩放,该缩放目前是放在 java 层做的,效率比较低,而且需要消耗 java 层的内存。因此,如果大量使用该接口加载图片,容易导致OOM错误,BitmapFactory.decodeStream 不会对所加载的图片进行缩放,相比之下占用内存少,效率更高。
这两个接口各有用处,如果对性能要求较高,则应该使用 decodeStream;如果对性能要求不高,且需要 Android 自带的图片自适应缩放功能,则可以使用 decodeResource。
推荐阅读:[ BitmapFactory.decodeResource加载图片缩小的原因及解决方法
canvas和Matrix可对Bitmap进行旋转、放缩、平移、切错等操作
可以用Bitmap.onCreateBitmap、Canvas的clipRect和clipPath等等方式
推荐阅读: android自定义View学习4--图像剪切与变换
对初始化Bitmap对象过程中可能发生的OutOfMemory异常进行了捕获。如果发生了OutOfMemory异常,应用不会崩溃,而是得到了一个默认的Bitmap图。
如果不进行缓存,尽管看到的是同一张图片文件,但是使用BitmapFactory类的方法来实例化出来的Bitmap,是不同的Bitmap对象。缓存可以避免新建多个Bitmap对象,避免内存的浪费。
如果图片像素过大,使用BitmapFactory类的方法实例化Bitmap的过程中,需要大于8M的内存空间,就必定会发生OutOfMemory异常。
可以将图片缩小,以减少载入图片过程中的内存的使用,避免异常发生。
推荐阅读:
Bitmap详解与Bitmap的内存优化

更多文章:
跷二郎腿太低好吗?想要通过贴墙站改正二郎腿影响的话,有哪些要点需要注意
2026年10月11日 05:10
易语言点击js按钮(易语言网页填表怎样点击链接为“javascript:void(0)“的按钮)
2026年10月11日 03:00
compare with造句(用compared with和compared to造句)
2026年10月10日 23:30
tensorflow与keras对应版本(为什么tensorflow2.8没有keras)
2026年10月10日 22:10
maven仓库jar网站(如何在maven仓库中添加jar包)
2026年10月10日 19:50






