BMP位图透明格式的详解制作教程-推荐下载

合集下载

BMP图片文件详解

BMP图片文件详解

有一个长宽各为 200 个象素,颜色数为 16 色的彩色图,每一个象素都用 R,G,B 三个分 量表示,因为每个分量有 256 个级别,要用 8 位( bit),即一个字节(byte)来表示,所以每个象素需要用 3 个字节。整个图象要用 200*200*3, 约 120k 字节,可不是一个小数目呀! 如果我们用下面的方法, 就能省的多。 因为是一个 16 色图,也就是说这幅图中最多只有 16 种颜色,我们可以用一个表:表中的每 一行记录一种颜色的 R,G,B 值。这样当我们 表示一个象素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。举个例 子,如果表的第 0 行为 255,0,0(红色) ,那么当某个象素为
色时,只需要标明 0 即可。 让我们再来计算一下:16 种状态可以用 4 位(bit)表示,所以 一个象素要用半个字节。整个图象要用 200*2 00*0.5,约 20k 字节,再加上表占用的字节为 3*16=48 字节.整个占用的字节数约为前面的 1/6,省很多吧。 这 张 RGB 的 表 , 即 是 我 们 常 说 的 调 色 板 (Palette) , 另 一 种 叫 法 是 颜 色 查 找 表 LUT(LookUpTable),似乎更确切一些。Windows 位图中便用
biXPelsPerMeter 指定目标设备的水平分辨率,单位是每米的象素个数,关于分辨率的概念,我们将在打印部 分详细介绍。
biYPelsPerMeter 指定目标设备的垂直分辨率,单位同上。
biClrUsed 指定本图象实际用到的颜色数,如果该值为零,则用到的颜色数为 2 的 biBitCount 次方。
biSizeImage 指定实际的位图数据占用的字节数,其实也可以从以下的公式中计算出来:

(一)制作透明图

(一)制作透明图

使用Lview Pro介紹(一)製作透明圖在WWW上可以看到許多漂亮的圖片,其中有許多是經過加工製作成透明圖,也就是利用MASK的功能(或稱為XOR),將同樣的顏色變成看不見,與背景色完全結合,以增加美觀, 更具吸引力..... 實際上有許多繪圖軟體都可以製作透明圖﹐例如﹕著名的Photo Shop﹑Core Draw以及一些很好有的Shareware﹐如Lview Pro﹑GIF Construction Set等等。

基本的技巧在於Exclusion OR (XOR)的觀念﹐也就是利用遮罩(mask)將一樣的顏色互補﹐就等於沒有顏色了。

例如﹐如果有一張圖片的底色是純白色(假設代號為15﹐2進位碼為1111)﹐它的遮罩顏色就必須是純白色的1111。

下表就是以簡單的理論來介紹透明圖的相關知識﹐何謂XOR的概念﹐然後再談何謂遮罩(mask)的概念。

X Y X AND Y X OR Y X XOR Y1 1 1 1 01 0 0 1 10 1 0 1 10 0 0 0 0上表中有三種邏輯運算子AND﹑OR及XOR﹐為簡單說明可以把「0」當作「不可見」﹐而「1」為「可見」﹕x和y必須都是「可見」時AND的結果才會是「可見」﹔x和y只要有一個是「可見」時OR的結果就會是「可見」﹔當x和y不一樣時﹐XOR的結果就為「可見」﹐當x和y完全一樣時﹐其結果就是「不可見」。

而遮罩(mask)的概念就是延申XOR的概念﹐就像是過濾器一樣﹐例如有個圖的每一點都是由4-bit所組成﹐也就是每一點都可以有2的4次方=16色﹐如果遮罩(mask)的顏色為1111﹐那麼原來的圖所有的1111就會變成0000﹐如果剛好是這張圖的背景顏色﹐那麼貼到Browser 來看﹐就像是去掉背景的透明圖﹐所以不論把這張圖放到那種底圖上﹐都不會蓋掉原有的色彩。

如果以上淺顯的理論不懂也沒關係﹐只要找到合適的去背景軟體﹐或是按照以下的步驟說明﹐就可以很容易完成你的作品。

设置图片透明度的四种方法

设置图片透明度的四种方法

设置图片透明度的四种方法设置图片透明度的四种方法分类: GDI+ 2011-07-24 01:13 121人阅读评论(0) 收藏举报方法一:像素法即循环扫描整张图片,设置每一个像素的Alpha通道的值。

由于是一个个像素的处理,所以这种方法效率很低。

[csharp]view plaincopy?1./// <summary>2./// 设置图片的透明度3./// </summary>4./// <param name="bitmap">原图</param>5./// <param name="alpha">透明度(0-255之间)</param>6./// <returns></returns>7.public static Bitmap SetBitmapAlpha(Bitmap bitmap, int a lpha)8.{9.Bitmap bmp = (Bitmap)bitmap.Clone();10.Color color;11.for (int x = 0; x < bmp.Width; x++)12.{13.for (int y = 0; y < bmp.Height; y++)14.{15.color = bmp.GetPixel(x, y);16.bmp.SetPixel(x, y, Color.FromArgb(alpha, color));17.}18.}19.20.bitmap.Dispose();21.return bmp;22.}方法二:内存法[csharp]view plaincopy?1.public static Bitmap SetBitmapAlpha(Bitmap bitmap, int a lpha)2.{3.Bitmap bmp = (Bitmap)bitmap.Clone();4.5.Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.He ight);6.System.Drawing.Imaging.BitmapData bmpData =7.bmp.LockBits(rect, System.Drawing.Imaging.ImageLockM ode.ReadWrite,8.PixelFormat.Format32bppArgb);9.10.IntPtr ptr = bmpData.Scan0; //获取首地址11.int bytes = Math.Abs(bmpData.Stride) * bmp.Height;12.byte[] argbValues = new byte[bytes];13.14.//复制ARGB的值到数组15.System.Runtime.InteropServices.Marshal.Copy(ptr, arg bValues, 0, bytes);16.17.for (int count = 3; count < argbValues.Length; count + = 4)18.{19.//设置alpha通道的值20.argbValues[count] = (byte)alpha;21.}22.23.System.Runtime.InteropServices.Marshal.Copy(argbVal ues, 0, ptr, bytes);24.bmp.UnlockBits(bmpData);25.26.27.bitmap.Dispose();28.return bmp;29.}方法三:指针法[csharp]view plaincopy?1.public static Bitmap SetBitmapAlpha(Bitmap bitmap, int a lpha)2.{3.Bitmap bmp = (Bitmap)bitmap.Clone();4.5.Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.He ight);6.BitmapData bmpData = bmp.LockBits(rect,7.ImageLockMode.ReadWrite, PixelFormat.Format32bppAr gb);8.9.unsafe10.{11.byte* p = (byte*)bmpData.Scan0;12.int offset = bmpData.Stride - bmp.Width * 4;13.for (int y = 0; y < bmp.Height; y++)14.{15.for (int x = 0; x < bmp.Width; x++)16.{17.//设置alpha通道的值18.p[3] = (byte)alpha;19.p += 4;20.}21.p += offset;22.}23.}24.25.bmp.UnlockBits(bmpData);26.bitmap.Dispose();27.28.return bmp;29.}方法四:矩阵法这个方法的效率最高。

BMP图片格式详解

BMP图片格式详解

BMP图像格式详解一.简介BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图象处理软件都支持BMP图象文件格式。

Windows系统内部各图像绘制操作都是以BMP为基础的。

Windows 3.0以前的BMP图文件格式与显示设备有关,因此把这种BMP图象文件格式称为设备相关位图DDB(device-dependent bitmap)文件格式。

Windows 3.0以后的BMP图象文件与显示设备无关,因此把这种BMP图象文件格式称为设备无关位图DIB(device-independent bitmap)格式(注:Windows 3.0以后,在系统中仍然存在DDB位图,象BitBlt()这种函数就是基于DDB位图的,只不过如果你想将图像以BMP格式保存到磁盘文件中时,微软极力推荐你以DIB格式保存),目的是为了让Windows能够在任何类型的显示设备上显示所存储的图象。

BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。

二.BMP格式结构BMP文件的数据按照从文件头开始的先后顺序分为四个部分:◆位图文件头(bmp file header):提供文件的格式、大小等信息◆位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息◆调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表◆位图数据(bitmap data):图像数据区BMP图片文件数据表如下:三.BMP文件头BMP文件头结构体定义如下:typedef struct tagBITMAPFILEHEADER{UINT16 bfType; //2Bytes,必须为"BM",即0x424D 才是Windows位图文件DWORD bfSize; //4Bytes,整个BMP文件的大小UINT16 bfReserved1; //2Bytes,保留,为0UINT16 bfReserved2; //2Bytes,保留,为0DWORD bfOffBits; //4Bytes,文件起始位置到图像像素数据的字节偏移量} BITMAPFILEHEADER;BMP文件头数据表如下:四.BMP信息头BMP信息头结构体定义如下:typedef struct _tagBMP_INFOHEADER{DWORD biSize; //4Bytes,INFOHEADER结构体大小,存在其他版本INFOHEADER,用作区分LONG biWidth; //4Bytes,图像宽度(以像素为单位)LONG biHeight; //4Bytes,图像高度,+:图像存储顺序为Bottom2Top,-:Top2BottomWORD biPlanes; //2Bytes,图像数据平面,BMP存储RGB数据,因此总为1 WORD biBitCount; //2Bytes,图像像素位数DWORD biCompression; //4Bytes,0:不压缩,1:RLE8,2:RLE4DWORD biSizeImage; //4Bytes,4字节对齐的图像数据大小LONG biXPelsPerMeter; //4 Bytes,用象素/米表示的水平分辨率LONG biYPelsPerMeter; //4 Bytes,用象素/米表示的垂直分辨率DWORD biClrUsed; //4 Bytes,实际使用的调色板索引数,0:使用所有的调色板索引DWORD biClrImportant; //4 Bytes,重要的调色板索引数,0:所有的调色板索引都重要}BMP_INFOHEADER;BMP信息头数据表如下:五.BMP调色板BMP调色板结构体定义如下:typedef struct _tagRGBQUAD{BYTE rgbBlue; //指定蓝色强度BYTE rgbGreen; //指定绿色强度BYTE rgbRed; //指定红色强度BYTE rgbReserved; //保留,设置为0 } RGBQUAD;1,4,8位图像才会使用调色板数据,16,24,32位图像不需要调色板数据,即调色板最多只需要256项(索引0 - 255)。

24位bmp位图转换为24位ico图标(透明效果)

24位bmp位图转换为24位ico图标(透明效果)

32×32的24位bmp位图转换为24位ico图标2009年03月03日星期二 10:25不需任何控件和外部函数,单击窗体,输入bmp文件名和ico文件名就完成了,如果输入的文件名错误,将取消转换Private Sub Form_Click()On Error GoTo cancelicoHead = Array(0, 0, 1, 0, 1, 0, 32, 32, 0, 0, 1, 0, 24, 0, 168, 12, 0, 0, 22, 0, 0, _0, 40, 0, 0, 0, 32, 0, 0, 0, 64, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0, 128, 12)Dim bmp(3125) As Byte, ico(3261) As Bytebegin:bmpfile = InputBox("请输入要转换的bmp文件名(全路径)")n = FileLen(bmpfile)Open bmpfile For Binary As #1Get #1, , bmpClose #1If bmp(18) <> 32 Or bmp(22) <> 32 Or n <> 3126 Thenm2 = MsgBox("文件不是32×32的24位位图,是否重新选择?", vbYesNo + 32)If m2 = vbNo Then GoTo cancelGoTo beginEnd IfFor i = 0 To 43ico(i) = icoHead(i)Next iFor i = 62 To 3133ico(i) = bmp(i - 8)Next iAutoRedraw = TrueScaleMode = 3Picture = LoadPicture(bmpfile) '在窗体上显示位图文件For y = 31 To 0 Step -1For x = 0 To 31 Step 8For b = 0 To 7ico(i) = ico(i) + 2 ^ (7 - b) * (-(Point(x + b, y) = RGB(192, 192, 192))) '把位图中颜色为RGB(192,192,192)的像素转换为透明Next bi = i + 1Next xNext yicofile = InputBox("请输入要保存的ico文件名(全路径)")Open icofile For Binary As #1Put #1, , icoClose #1MsgBox "32×32的24位位图" & vbCrLf & bmpfile & vbCrLf & _"已成功转换为24位图标" & vbCrLf & icofile, 64MousePointer = 99 '这两句把转换成的图标作为窗体的鼠标图标,以查看效果MouseIcon = LoadPicture(icofile)Exit Subcancel:MsgBox "转换被取消", 64End Sub转换原理:宽和高都不小于4的24位位图,文件的前36个字节(第0~35字节)是24位位图的标记,其中第15~18字节记录着图片的宽度,第19~22字节记录着图片的高度,设首字节为第0字节,第i 字节的值为bmp(i),则对于宽和高都小于65536的24位位图,宽=bmp(17)*256+bmp(18),高=bmp(21)*256+bmp(22),第36~53这18个字节不影响图片效果,文件的第54字节往后,每3个字节(24位)对应一个像素,所以文件大小为(54+宽*高*3)字节.32×32的24位位图文件大小为3126字节(记为第0~3125字节),前36个字节是66,77,54,12,0,0,0,0,0,0,54,0,0,0,40,0,0,0,32,0,0,0,32,0,0,0,1,0,24,0,0,0,0,0,0,12 32×32的24位ico图标文件至少3262字节(记为第0~3261字节),前44个字节(第0~43字节)是32×32的24位ico图标的标记,第44~61这18个字节不影响图标效果,第62~3133这3072个字节(3072*8=32*32*24)每3个字节(24位)对应一个像素,记录着所有像素的颜色,这与32×32的24位位图的第54~3125字节的对应规则一致,第3134~3261这128字节(1024位,128*8=32*32)每位对应一个像素,记录着每个像素是否透明,如果某个像素在这128字节中对应的那一位是1,表示该像素透明,是0则表示不透明.32×32的24位ico图标的前44个字节是0,0,1,0,1,0,32,32,0,0,1,0,24,0,168,12,0,0,22,0,0,0,40,0,0,0,32,0,0,0,64,0,0,0,1,0,24,0,0,0,0,0,128,12。

图像的透明背景制作很容易

图像的透明背景制作很容易

图像的透明背景制作很容易,许多个人主页上都有介绍。

用透明背景的图像的好处不仅仅在于好看,更重要的是它的字节数小,并且在download时,是交错显示!我们来看看下面的例子就清楚了。

非透明背景(7K)透明背景(1K)透明背景图通常指的是GIF89A 格式的图片,它的制作很简单,许多图像工具都可以做到。

我介绍一下用Photoshop制作透明背景的图片的步骤。

1。

首先打开图像,选择Image菜单下mode下的indexed color...转换图像格式。

2。

选择File菜单下的Export的第一项:GIF89a Export,跳出一个Options窗口,用吸管在背景上点一下(或者在调色板上选取需要的一种颜色,在图像背景上点一下),选OK,储存既可。

文章二:1. 打开你要处理的图片(可以是任何格式的),先调整它的尺寸大小,这一点虽然与透明背景图像没有什么联系,但图像太大会影响浏览速度,谁想只为了看一幅图片而“等你等得我心疼”呢!所以,在不影响视觉效果前提下应把图像尽量缩小,而且图像的长宽要和它在网页中的大小基本一致,否则图像插入后会发生变形。

调节尺寸可用(图像)菜单中的(图像尺寸)命令。

2. 用磁性套索工具选定需要的部分,这一步是为了把所需图像同原图中的不透明背景分离开来。

这个工具对于选定与背景颜色反差较大的部分非常方便,但也需要一定耐心,才能把所需图像完整地选下来。

然后使用“Edit(编辑)”菜单项中的“Copy(复制)”命令,把所选的内容复制到剪贴板中。

3. 使用“File(文件)”菜单中的“New(新建)”命令新建一图像。

尺寸使用对话框中的默认值,这是系统根据剪贴板中的数据给出的最小值。

在“Contents”这一栏中,一定要把“Transparent(透明)”项选中,这是是否能生成透明背景图像的关健。

单击“OK”后,如果不出意外的话,你会看见一幅有网格的新图像,其实这是一幅背景透明的空白图像。

4. 用“Edit(编辑)”菜单中的“Paste(粘贴)”命令把剪贴板的内容粘贴到新图像中,在左边的工具栏中选择移动工具,把图像移到合适的位置。

BMP图像格式详解

BMP图像格式详解

BMP格式图像文件详析首先请注意所有的数值在存储上都是按“高位放高位、低位放低位的原则”,如12345678h放在存储器中就是7856 3412)。

下图是导出来的开机动画的第一张图加上文件头后的16进制数据,以此为例进行分析。

T408中的图像有点怪,图像是在电脑上看是垂直翻转的。

在分析中为了简化叙述,以一个字(两个字节为单位,如424D就是一个字)为序号单位进行,“h”表示是16进制数。

424D 4690 0000 0000 0000 4600 0000 2800 0000 8000 0000 9000 0000 0100*1000 0300 0000 0090 0000 A00F 0000 A00F 0000 0000 0000 0000 0000*00F8 0000 E007 0000 1F00 0000 0000 0000*02F1 84F1 04F1 84F1 84F1 06F2 84F1 06F2 04F2 86F2 06F2 86F2 86F2......BMP文件可分为四个部分:位图文件头、位图信息头、彩色板、图像数据阵列,在上图中已用*分隔。

一、图像文件头1)1:图像文件头。

424Dh=’BM’,表示是Windows支持的BMP 格式。

2)2-3:整个文件大小。

4690 0000,为00009046h=36934。

3)4-5:保留,必须设置为0。

4)6-7:从文件开始到位图数据之间的偏移量。

4600 0000,为00000046h=70,上面的文件头就是35字=70字节。

5)8-9:位图图信息头长度。

6)10-11:位图宽度,以像素为单位。

8000 0000,为00000080h=128。

7)12-13:位图高度,以像素为单位。

9000 0000,为00000090h=144。

8)14:位图的位面数,该值总是1。

0100,为0001h=1。

二、位图信息头9)15:每个像素的位数。

透明贴图实现

透明贴图实现

透明贴图绘制透明位图是指在绘制位图时只绘制除了指定颜色外的其余部分,而指定的颜色就被称为“透明色”。

通过将位图的背景色指定成“透明色”,在绘制时不绘制带“透明色”的这部分背景,仅绘制图像,这样就可以将图像透明地绘制到窗口上。

绘制包含透明色的位图的方法有许多种,比较常用的是屏蔽绘制和非屏蔽绘制,屏蔽绘制指的是事先做一张掩码位图,非屏蔽绘制是动态生成掩码位图。

下面将分别详细介绍这两种绘制方法。

在写透明贴图的方法前先来说说透明贴图,所谓的透明贴图并不是真正意义上的透明,而是图像不需要显示的部分显示出的颜色是当前对话框的背景色,也就是说把图像不需要显示的颜色当成背景色,显示的部分作为前景色,透明就是把背景换成对话框背景。

要实现这种透明有两种方法,一种是让背景色成为白色,然后与对话框背景色进行与运算;还有一种是让背景色成为黑色,然后与对话框背景色进行或运算。

这样位图的背景色就消失了。

了解了透明的概念,就可以避免透明贴图的一些缺点,如果位图的前景色也存在许多白色,则采用将背景色变成黑色,与对话框背景色进行或运算的方法,这样前景色的白色部分才不会被误当成背景色透明显示;反过来,如果位图前景色存在大量黑色部分是,则采用将背景色变成白色,与对话框背景色进行与运算的方法。

当然,如果前景色同时存在大量白色和黑色时,则透明贴图会遇到大麻烦,需要想办法将位图的白色或黑色部分做一些修改后再进行透明贴图。

屏蔽绘制绘制透明位图的关键就是创建一个“掩码”位图(mask bitmap),这个“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。

在MFC中,绘图需要使用设备描述表,透明贴图时需要创建两个内存设备描述表,一个是用于存放位图的设备描述表(imgDC),一个是用于存放“掩码”位图的设备描述表(maskDC)。

在“掩码”位图设备描述表中制作“掩码”位图的方法是先创建一个单色的bitmap,放入掩码设备描述表(maskDC)中,然后使用拷贝粘贴的方式将存放有位图的设备描述表(imgDC)绘制到掩码设备描述表上,这样,掩码设备描述表显示的位图即是“掩码”位图。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

*.BMP位图透明格式的详解制作教程
2007-02-11 17:44
透明格式的 BMP 位图是存在的...在图片浏览器中是看不到效果的..这一点一定要清楚
WINXP里的预设位图都是256色..也就是8位元.因此不需要带a通道..WINXP本身就认可8位元的背景255.0.255 为透明色
实现这种格式有五种方法
第一种:就是有人提到的使用 Iconworkshop 6.0 转换一下. (注意:最好用做好的PNG图转成带α通道的Windows 位图BMP(32位))采用alpha通道的这种格式能在Windows下面的程序中用...
在DLL中的透明位图资源中,要看清楚你要替换资源的分辩率及位深度(即8位, 16位,32位)
第二种:就是把做好的PNG导入到画图工具里..另存为24位位图..就可以了..效果同上..
第三种:有些资源里面不是有一些位图周围是紫色的吗,把那个位图保下来,然后在这个位图里面编辑你要的图形(这个是索引16位位图),这种位图可以在Windows下使用
下面这张是从DLL的位图资源里保存出来的,进行说明
第四种:制作好你的位图以后,在通道标签里新建一个ALpha通道,把你想透明的部分用黑色填充,其余部分用白色填充。

最后保存成32位位图。

效果第一种一样。

第五种:是自己做Windows默认为RGB色255,0,255(紫色)为透明。

相关文档
最新文档