【问题标题】:transparency on a 32-bit bmp doesnt do anything32 位 bmp 的透明度没有任何作用
【发布时间】:2020-01-07 16:44:03
【问题描述】:

这个 32 位 bmp https://drive.google.com/open?id=1thySBsggtdihd3LByiAwQwZmVo1lzZfl 具有透明度。但由于某种原因,我的图像查看器/编辑器都没有显示透明度。

我该如何修复这个 bmp?

【问题讨论】:

    标签: image transparency bmp


    【解决方案1】:

    您的 BMP 文件未正确编码以支持透明度。

    根据following post

    取决于压缩方式,默认RGB方式支持24位颜色,但BITFIELDS压缩支持32位颜色(24位+alpha通道)。

    根据Wikipedia:
    对于BI_BITFIELDS,标头地址1Eh 的值应为3
    而地址36h3Ah3Eh42h 的值定义了掩码:

    36h 4 00 00 FF 00 00FF0000 Red channel bit mask (BI_BITFIELDS)
    3Ah 4 00 FF 00 00 0000FF00 Green channel bit mask (BI_BITFIELDS)
    3Eh 4 FF 00 00 00 000000FF Blue channel bit mask (BI_BITFIELDS)
    42h 4 00 00 00 FF FF000000 Alpha channel bit mask

    您可以在线分析图片的元数据here

    你的文件分析结果,压缩是None
    File Name: BLUE_CLOSEBUTTON_BMP.bmp
    File Size: 14 kB
    ...
    Compression: None

    您的 BMP 文件(位深为 32 位,但不透明):


    我使用GIMP 来保存具有透明度的 BMP。

    分析结果,压缩是Bitfields

    File Name: 1.bmp
    File Size: 14 kB
    Compression: Bitfields
    ...
    Red Mask: 0xff000000
    Green Mask: 0x00ff0000
    Blue Mask: 0x0000ff00
    Alpha Mask: 0x000000ff p>

    这是带有透明条纹的 BMP(文件已被网站自动转换为 PNG):


    检查你的图片是否真的有透明度:

    <img src="https://i.stack.imgur.com/NCdOW.png" style="background-color:blue;" />

    检查我发布的图片是否真的有透明度:

    <img src="https://i.stack.imgur.com/urljs.png" style="background-color:blue;" />

    【讨论】:

    • 问题是windows xp从luna.msstyles获取这个bmp并正确解释透明度(按钮的角是透明的)。所以这张图一定是透明的吧?
    • 看起来源图像具有透明度,但在某些转换过程中透明度丢失了。我在我的帖子中添加了一个代码 sn-p (证明什么都没有)。根据维基百科,您的 BMP 图像格式不是具有透明度的 BMP 图像的正确格式。按钮的角是透明的事实并不是一个很好的证明 - 检查中心是否也可以是透明的。我建议您使用 PNG 图像格式而不是 BMP(如果可能)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2020-09-05
    • 2012-08-22
    • 1970-01-01
    • 2011-08-21
    • 2013-11-30
    • 2013-03-23
    相关资源
    最近更新 更多