读书人

有办法将图片的RGB转向ALPHA吗

发布时间: 2012-12-14 10:33:08 作者: rapoo

有办法将图片的RGB转为ALPHA吗?
本帖最后由 ztjal 于 2012-10-05 00:31:37 编辑 图1,这张图的RGB其实就是ALPHA



-----------------------------------------

图2,这张图是在PHOTOSHOP上CTRL+A将RGB复制去ALPHA上的结果(要看ALPHA)



=====================================================================

在程序上如何实现?

程序上的结果就是将RGB变成0-255的值。

例如:photoshop上可以直接将rgb复制到alpha通道上。

目前用那个转灰度的公式0.299 0.587 0.114来转,但有损失,想搞photoshop那种无损的转换。

[解决办法]
程序上不就是构建一副ARGB格式的图像,将你的RGB数据复制到RGB通道,将上面这个图(你那个图明显是一副灰度图,即使你保存的是24位的,其RGB分量也是相同的)的数据复制到A通道啊。


[解决办法]
可以的。将黑色值(R+G+B)/255的百比分来弄成ALPHA
[解决办法]
不过PS是通过在BMP文件格式后追加一个ALPHA数据来实现的,因为BMP本身不支持alpha,所以不能用常规的在程序中直接new bitmap来做。要先提取追加的这段数据。
[解决办法]

引用:
程序上不就是构建一副ARGB格式的图像,将你的RGB数据复制到RGB通道,将上面这个图(你那个图明显是一副灰度图,即使你保存的是24位的,其RGB分量也是相同的)的数据复制到A通道啊。


抱歉,我写少了条件了,上面的图是24位的,但我想问的是Format8bppIndexed的问题。
因为无论系统的画图或者用.net的读入再保存,Format8bppIndexed的图转出来后马上“失真”,不能保持原来的色。
在PHOTOSHOP上复制去ALPHA的话就不会有问题,我就是想实现这个。

目前我用的是这个笨办法

If pColorB.R = pColorB.G And pColorB.R = pColorB.B Then
iAlpha = pColorB.R
Else
iAlpha = CInt(0.212671 * pColorB.R + 0.71516 * pColorB.G + 0.072169 * pColorB.B)
End If



引用:
可以的。将黑色值(R+G+B)/255的百比分来弄成ALPHA


这样还不如 (R+G+B)\ 3 更快。

引用:
不过PS是通过在BMP文件格式后追加一个ALPHA数据来实现的,因为BMP本身不支持alpha,所以不能用常规的在程序中直接new bitmap来做。要先提取追加的这段数据。


.net下什么都不声明的话New Bitmap默认就是32位图。

读书人网 >VB Dotnet

热点推荐