首先说明谁说BMP不可以透明?别这么和我说我已经用PS的通道实现了但问题来了,我现在只能保存32位的带通道的透明BMP文件,我如何保存24位的BMP仍然可以带通道透明效果以下是在网上已经有人解决的方法,不过我不搞编程。这东西实在是看不懂,如果有明白的可以说下是在什么东西里,编写什么命令语句最好
---------------------------------------------------------------------
RGB24
RGB24使用24位来表示一个像素,RGB分量都用8位表示,取值范围为0-255。注意在内存中RGB各分量的排列顺序为:BGR BGR BGR…。通常可以使用RGBTRIPLE数据结构来操作一个像素,它的定义为:
typedef struct tagRGBTRIPLE {
BYTE rgbtBlue; // 蓝色分量
BYTE rgbtGreen; // 绿色分量
BYTE rgbtRed; // 红色分量
} RGBTRIPLE;
RGB32
RGB32使用32位来表示一个像素,RGB分量各用去8位,剩下的8位用作Alpha通道或者不用。(ARGB32就是带Alpha通道的RGB32。)注意在内存中RGB各分量的排列顺序为:BGRA BGRA BGRA…。通常可以使用RGBQUAD数据结构来操作一个像素,它的定义为: typedef struct tagRGBQUAD {
BYTE rgbBlue; // 蓝色分量
BYTE rgbGreen; // 绿色分量
BYTE rgbRed; // 红色分量
BYTE rgbReserved; // 保留字节(用作Alpha通道或忽略)
} RGBQUAD。
就是多了一个透明通道,直接右移8为丢掉这个8位信息就可以了
----------------------------------------------------------------------------
所以只要移除透明的分量就ok:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
case 32:
{
// 对于32位图像,丢弃透明部分数据
// 读取数据文件
int size = (bih.biWidth*4+nAdjust24)*bih.biHeight;
data= new BYTE [size];
pData24 = new BYTE [size];
fseek (f,bfh.bfOffBits,SEEK_SET);
fread (data,size,1,f);
fclose (f);
for (j=0;j<bih.biHeight;j++){
for (i = 0;i<bih.biWidth;i++)
{
// 只保存 RGB,不处理 alpha
pData24[j*(bih.biWidth*3+nAdjust24)+i*3] = data[j*(bih.biWidth*4+nAdjust24)+i*4+2];
pData24[j*(bih.biWidth*3+nAdjust24)+i*3+1] = data[j*(bih.biWidth*4+nAdjust24)+i*4+1];
pData24[j*(bih.biWidth*3+nAdjust24)+i*3+2] = data[j*(bih.biWidth*4+nAdjust24)+i*4];
}
}
nComponent = 3;
break ;
}
|
相关推荐
24位BMP提供了8位红、8位绿、8位蓝三种颜色通道,总共能表示16777216种颜色,而32位BMP除了红、绿、蓝三个通道外,还增加了一个8位透明度通道(Alpha通道),能够支持透明效果。 在C#中处理BMP文件时,我们可以利用...
上述代码中,我们先加载BMP文件,然后创建一个新的PNG图像,设置其格式为32位带Alpha通道(即支持透明),并清除背景为透明。接着,我们将BMP图像绘制到PNG上,最后保存PNG文件。 为了实现批量转换,我们可以遍历...
BMP图像的颜色信息可以是8位灰度、24位RGB(红绿蓝)三通道或者更高位深,如32位包括透明度信息的ARGB。 16进制数组的生成涉及到读取BMP文件的像素数据并将其转化为16进制字符串。以下是具体步骤: 1. **解析BMP...
- BMP图片可能有不同位深度(如8位、24位等),处理时需考虑颜色通道的数量。 - 对于大图片,遍历和处理像素可能会较慢,可以考虑使用多线程或异步处理来提高效率。 - 透明处理可能需要支持alpha通道,这在一些...
24位BMP每个像素由红、绿、蓝三个分量组成,32位BMP在此基础上还有一个透明度通道(Alpha)。 4. **设置源数据**:根据BMP格式的特性,将读取的像素数据转换为JPEG库所需的RGB格式。32位BMP的Alpha通道通常会被忽略...
也就是说,对于 24 位的RGB位图像素数据格式是:蓝色B值绿色G值红色R值对于 32 位的RGB位图像素数据格式是:蓝色B值绿色G值红色R值透明通道A值透明通道也称Alpha通道,该值是该像素点的透明属性,取值在 0(全透明)...
本项目主要关注如何将BMP和JPG图片格式转换为PNG格式。PNG(Portable Network Graphics)是一种无损压缩的位图格式,支持透明度,并且广泛用于网页和其他数字媒体中。 首先,要实现这个功能,你需要在你的Delphi...
8位BMP图像通常用于灰度图像,而16、24和32位BMP则支持丰富的色彩,其中32位包含阿尔法通道,允许半透明效果。相反,JPEG采用有损压缩算法,牺牲部分图像质量以换取更小的文件尺寸,适合于照片和其他对细节要求不...
此外,由于BMP格式不支持透明度,我们需要处理PNG的透明通道(如果存在),将其转化为BMP的特定表示,如Alpha通道或使用特定颜色表示透明。 在“pngtobmpdemo”这个项目中,我们可以预见到包含了一个演示如何完成这...
ICO文件支持的最大尺寸为256x256像素,并且可以包含8位到32位的颜色深度,包括透明度信息。 **BMP文件详解** BMP(Bitmap)文件是未经压缩的位图图像格式,它保存了图像的每个像素的颜色信息。BMP文件支持多种...
- 多色深支持:BMP可以支持1位到32位的颜色深度,从黑白到真彩色。 - 透明度支持:部分BMP文件支持Alpha通道,实现半透明效果。 - 无压缩:文件体积大,因为图像数据未经过任何压缩处理。 - 头部信息:BMP文件...
在Windows系统中,BMP文件可以支持24位真彩色,但为了降低存储空间或适应某些特定需求,有时会将图片转换为256色模式。 "图片转换为256色bmp的工具"是一个专门用于将图片转化为256色BMP格式的应用程序。这种工具...
这包括处理色彩位深度(如8位、24位或32位),以及处理透明度信息,因为ICO文件支持透明,而BMP通常不支持。 3. Delphi的图像处理库:Delphi提供了TBitmap类,这是一个用于处理位图的组件。通过这个类,我们可以...
8位BMP通常用于黑白图像,24位用于彩色图像,而32位则增加了透明度通道(Alpha通道),提供更好的图像效果。 接下来,为了将BMP图片序列合并成AVI视频,开发者需要使用DirectShow或Video for Windows (VFW) API。...
BMP支持8位、24位和32位颜色深度,其中8位代表256色,24位代表真彩色,32位则包括一个用于透明度的额外通道。 2. **WMV视频格式**:WMV是基于ASF(Advanced Systems Format)容器的一种压缩视频格式。它使用了各种...
32位的BITMAPINFOHEADER结构是最常见的,但也有更复杂的BITMAPV4HEADER和BITMAPV5HEADER用于支持额外的特性。 3. 颜色表:对于索引颜色模式的BMP文件,这里会包含一个颜色表,存储每个像素所用颜色的RGB值。对于24...
同时,用户还可以选择颜色深度,如256色、16位色、32位色(带Alpha通道),这会影响图标的清晰度和色彩丰富度。 3. **透明度支持**:ICO格式支持透明效果,通过魔法ICO转换时,可以保留原图的透明信息,使得图标在...
- 32位彩色:包含了额外的透明通道(Alpha通道),适合需要半透明效果的应用。 3. **自定义图片尺寸**:Img2lcd允许用户调整输出图片的高度和宽度,这在适配不同分辨率的LCD屏幕或者优化内存占用时非常有用。用户...
在24位真彩色图像中,每个像素由红、绿、蓝三种颜色的分量组成,每种颜色占8位,总共24位。灰度图像则只有一个通道,表示像素的亮度。转换过程中,通常会根据人眼对不同颜色敏感度的不同,将红、绿、蓝三色按一定...
3. **色彩深度控制**:用户可以根据需要选择16色、256色、16位、24位或32位真彩色,以确保在不同系统环境下图标看起来清晰美观。 4. **透明处理**:支持Alpha通道的ICO文件可以实现半透明效果,转化工具通常会保留...