0

我会感谢你们低级程序员的帮助......我的问题是:我想将格式 ARGB8888 的位图直接打印到视频内存中。位图的形式还可以,问题是我不知道如何使用的 alpha 通道。我在维基百科中看到过这样覆盖像素的代码:

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

颜色在 0 - 1 之间变化。这是针对每个通道 RG B 完成的。我正在做的是使用上面的公式将位图每个像素的每种颜色的每个字节直接复制到视频内存中,但我是缺少一些东西,因为颜色不适合自己。

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

4

1 回答 1

0

在您发布的代码中,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;

请注意,虽然这些是短裤,但值都应该是 0 - 255,short 只需要作为 char * char 产品的计算空间,您也可以使用中间转换,但我只是使用 unsigned short 类型来使它更多可读。

于 2011-01-11T11:53:04.837 回答