RenderTargetBitmap,格式为rgba32

时间:2016-11-16 11:40:19

标签: c# wpf bitmap

我对位图不是很熟悉,我需要将 statusButton.setchecked(true); (具体FrameworkElement)保存为位图并将其复制到缓冲区。问题是我需要以Rgba格式保存它,而不是Grid中不支持的Pgrba。相关代码在这里:

RenderTargetBitmap

我尝试使用WriteableBitmap,但我没有如何呈现Child。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

CopyPixels功能已经允许您直接访问像素数据,因此您需要做的就是在格式之间进行转换。在这种情况下,您需要交换通道顺序并撤消alpha值的预乘。

注意:此代码假定您的bufferPtr是字节数组或字节指针。

for (int y = 0; y < yres; y++)
{
    for (int x = 0; x < xres; x++)
    {
        // Calculate array offset for this pixel
        int offset = y * _stride + x * 4;

        // Extract individual color channels from pixel value
        int pb = bufferPtr[offset];
        int pg = bufferPtr[offset + 1];
        int pr = bufferPtr[offset + 2];
        int alpha = bufferPtr[offset + 3];

        // Remove premultiplication
        int r = 0, g = 0, b = 0;
        if (alpha > 0)
        {
            r = pr * 255 / alpha;
            g = pg * 255 / alpha;
            b = pb * 255 / alpha;
        }

        // Write color channels in desired order
        bufferPtr[offset] = (byte)r;
        bufferPtr[offset + 1] = (byte)g;
        bufferPtr[offset + 2] = (byte)b;
        bufferPtr[offset + 3] = (byte)alpha;
    }
}