我对位图不是很熟悉,我需要将 statusButton.setchecked(true);
(具体FrameworkElement
)保存为位图并将其复制到缓冲区。问题是我需要以Rgba格式保存它,而不是Grid
中不支持的Pgrba。相关代码在这里:
RenderTargetBitmap
我尝试使用WriteableBitmap,但我没有如何呈现Child。有什么建议吗?
答案 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;
}
}