繁体   English   中英

如何直接在内存中处理来自PNG的alpha透明度?

[英]How to treat alpha transparency from PNG directly in memory?

我希望您能得到底层程序员的帮助...我的问题是:我想将ARGB8888格式的位图直接打印到视频存储器中。 位图的形式还可以,问题是我不知道如何使用的Alpha通道。 我已经在Wikipedia中看到了覆盖像素的代码,如下所示:

CompositedPixelColor = Alpha * ForegroundPixelColor + (1 - Alpha) * BackgroundPixelColor

颜色从0到1不等。这是针对每个通道RG B进行的。我正在使用上述公式将位图每个像素的每个颜色的每个字节直接复制到视频内存中,但是错过了一些东西,因为颜色本身不能正常显示。

我正在尝试执行与此线程中发布的代码类似的操作: http : //www.badadev.com/create-a-photo-editing-app/但在这里,他们不重视透明度,这就是我的问题。 谢谢!

在您发布的代码中,将alpha视为0到1之间的值,如果您将alpha通道用作无符号字符,那么这当然不起作用,如果要在整数空间中使用它,请使用以下代码:

unsigned short background = 0x40;
unsigned short foreground = 0xe0;
unsigned short alpha = 0xc0;
unsigned short compositedcolor = (alpha * foreground + (0xff - alpha) * background) >> 8;

请注意,尽管这些是short值,但所有值都应为0-255,只是需要short作为char * char产品的计算空间,您也可以使用中间强制类型转换,但是我只是对所有对象使用了无符号short类型,以使其更出色可读的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM