Bitmap重要属性

转载 2012年08月11日 14:41:04
Bitmap重要属性整理
2009-02-24 14:13

Bitmap:

(1)     public Bitmap (int width,int height,int stride,     PixelFormat format,IntPtr scan0)

用指定的大小、像素格式和像素数据初始化 Bitmap 类的新实例。

(2)     LockBits():,就是把图像的内存区域根据格式锁定,拿到那块内存的首地址。这样就可以直接改写这段内存了。这个方法的设计是挺好,可惜都是C++作为源泉来的,.NET Framework里面根本就不推荐用指针,需要用Marshal.Copy把内容Copy到一个byte数组里面,然后处理完了再Copy回去。

(3)     UnlockBits():从系统内存解锁此 Bitmap。

 

BitmapData:位图图像的属性

(1)   Height获取或设置 Bitmap 对象的像素高度。有时也称作扫描行数。

(2)   PixelFormat: 获取或设置返回此 BitmapData 对象的 Bitmap 对象中像素信息的格式。

(3)   Reserved: 保留。不要使用。

(4)   Scan0: 获取或设置位图中第一个像素数据的地址。它也可以看成是位图中的第一个扫描行。

(5)   Stride: 获取或设置 Bitmap 对象的跨距宽度(也称为扫描宽度)。

Stride:跨距是单行像素(一个扫描行)的宽度,舍入为一个 4 字节的边界。跨距总是大于或等于实际像素宽度。如果跨距为正,则位图自顶向下。如果跨距为负,则位图颠倒。Stride是指图像每一行需要占用的字节数。根据BMP格式的标准,Stride一定要是4的倍数。据个例子,一幅1024*768的24bppRgb的图像,每行有效的像素信息应该是1024*3 = 3072。因为已经是4的倍数,所以Stride就是3072。那么如果这幅图像是35*30,那么一行的有效像素信息是105,但是105不是4的倍数,所以填充空字节,Stride应该是108。这一行计算出来的offset就是3。一要注意必须是4的倍数,二单位是字节!

(6)   Width: 获取或设置 Bitmap 对象的像素宽度。这也可以看作是一个扫描行中的像素数。

 

PixelFormat:

(1)     Format24bppRgb,也就是24位色。在这种格式下3个字节表示一种颜色,也就是我们通常所知道的R,G,B,所以每个字节表示颜色的一个分量。

(2)     Format32bppArgb,除了RGB,在图像中还存在一个通道,叫做A。这个A就是用来描述当前像素是透明,半透明,还是全透明的分量。这个通道是2个叫Catmull和Smith在上世纪70年代初发明的。通过这个分量,我们可以进行alpha混合的一些计算。从而使表面的图像和背景图像混合,从而造成透明半透明的效果。在这种格式下A作为一个byte,取值可以从0到255,那么0表示图像完全透明,则完全不可见,255则表示图像完全不透明。每个像素都可以实现这种透明或者半透明的效果。更详细解释可以参考http://en.wikipedia.org/wiki/Alpha_compositing,或者去买本数字图像处理的书回来看。

(3)     Format32bppPArgb,这叫做premultiplied alpha,就是说在RGB分量里面,alpha分量的数据已经被预先乘进去了。比如说,一个半透明的红色点,在ARGB下,矢量是(255,0,0,128),而在PARGB下就变成了(128,0,0,128)。这是为了不要每次都做乘法。

(4)     Bitmap保存成为一个文件,那么必须用png格式,才能够保存alpha通道的信息。如果你存为JPG/BMP/GIF,那么alpha通道的信息将会被丢失。如果存为BMP,那么文件格式将变成Format32bppRgb,其中1个字节不再使用;如果保存为JPEG,那么是Format24bppRgb;存为GIF,格式将变成Format8bppIndexed。根据标准,BMP/JPG本来就不支持透明通道,所以没有可能保留透明信息。GIF倒是支持透明,但是GIF中颜色的信息都是索引,所以Alpha的解释对GIF完全没有效果,

 

BitmapInfoHeader:

biHeight:说明图象的高度,以象素为单位。

    如果该值是一个正数,说明BtimapBottom up DIB,起始点是左下角,也就是从图像的最下面一行扫描,位图数组中得到的第一行数据实际是图形的最下面的一行。图像是倒向的;

    如果该值是一个负数,则说明图像是TopDown DIB,起始点是左上角,图像从最上面一行扫描,图像正向的。

   大多数的BMP文件都是倒向的位图,也就是时,高度值是一个正数。(注:当高度值是一个负数时(正向图像),图像将不能被压缩(也就是说biCompression成员将不能是BI_RLE8BI_RLE4)。

Bitmap的四种属性,与每种属性对应的大小

参考文章:http://blog.csdn.net/rabbit_in_android/article/details/49967461
  • chun0801
  • chun0801
  • 2016-07-20 09:22:53
  • 2171

Bitmap四种属性

我们知道Android系统分配给每个应用程序的内存是有限的,Bitmap作为消耗内存大户,我们对Bitmap的管理稍有不当就可能引发OutOfMemoryError,而Bitmap对象在不同的Andr...
  • rabbit_in_android
  • rabbit_in_android
  • 2015-11-21 20:30:33
  • 6140

与元素大小相关的属性

元素区域由内至外依次为:内容区域、内边距、边框、外边距。(盒子模型)如下图: 通过以下四个属性可以取得元素的偏移量:、 offsetHeight:垂直方向上占用空间大小(像素),包括元素内容区...
  • qq_24849765
  • qq_24849765
  • 2016-03-10 22:36:30
  • 205

Android的Bitmap类中常用方法

boolean compress(Bitmap.CompressFormat format, int quality, OutputStream stream) Write a compr...
  • nannan_smile
  • nannan_smile
  • 2014-05-27 22:56:04
  • 3057

Bitmap重要属性

Bitmap重要属性整理 2009-02-24 14:13 Bitmap: (1)     public Bitmap (int width,int height,int s...
  • tinyhell127
  • tinyhell127
  • 2012-08-11 14:41:04
  • 1661

HTML5 类名操作的四种属性

1、Node.classList.add('class') 添加class 2、Node.classList.remove('class') 移除class 3、Node.classList.to...
  • wy_Blog
  • wy_Blog
  • 2017-02-20 00:27:55
  • 497

android之bitmap-xml文件属性详解

android:antialias——开启或关闭抗锯齿 android:dither——开启或关闭图像抖动(如果位图与显示屏幕的像素配置不相同时会用到,比如一张ARGB 8888 位图和一个R...
  • u013279840
  • u013279840
  • 2016-03-07 21:53:21
  • 2189

基于Pawlak属性重要度的属性约简算法

大概一年前写代码实现了这个算法,今天有人问我要,在这里贴出来好了。具体算法思路我也忘了,但是代码应该还算清晰。只需要事先了解下STL。/* 测试数据21/10 X1 X2 X3 ...
  • njdragonfly
  • njdragonfly
  • 2010-05-02 22:08:00
  • 1825

探索Bitmap使用姿势

转载请注明出处:https://lizhaoxuan.github.io 前言 早些时候对Android下GC调用时机比较好奇,所以写了一些case测试各种情况下Android GC调用时机与...
  • u010255127
  • u010255127
  • 2018-01-28 00:16:28
  • 109

Android的图像处理类Bitmap各种功能实现的详细介绍

Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。本文从应用的角度,着重介绍怎么用Bitmap来实现这些...
  • liyuchong2537631
  • liyuchong2537631
  • 2015-11-09 10:25:38
  • 3348
收藏助手
不良信息举报
您举报文章:Bitmap重要属性
举报原因:
原因补充:

(最多只允许输入30个字)