首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WriteableBitmap设置像素

WriteableBitmap设置像素
EN

Stack Overflow用户
提问于 2017-12-07 20:40:28
回答 0查看 1.1K关注 0票数 0

我正在使用WPF,我想操纵我的图像的一些像素。我之所以使用WritableBitmap,是因为我可以从源代码中间接使用它。当我尝试设置一些像素的RGB值(按顺序)时,结果并不是我所期望的。我使用这个扩展方法来读取源文件:

代码语言:javascript
复制
        public static PixelColor[,] CopyPixels(this BitmapSource source,out int stride)
        {
            if (source.Format != PixelFormats.Bgra32)
                source = new FormatConvertedBitmap(source, PixelFormats.Bgra32, null, 0);
                PixelColor[,] pixels = new PixelColor[source.PixelWidth, source.PixelHeight];
                stride = source.PixelWidth * ((source.Format.BitsPerPixel + 7) / 8);
                GCHandle pinnedPixels = GCHandle.Alloc(pixels, GCHandleType.Pinned);
                source.CopyPixels(
                  new Int32Rect(0, 0, source.PixelWidth, source.PixelHeight),
                  pinnedPixels.AddrOfPinnedObject(),
                  pixels.GetLength(0) * pixels.GetLength(1) * 4, stride);

            pinnedPixels.Free();
            return pixels;
        }

输出结构是

代码语言:javascript
复制
[StructLayout(LayoutKind.Sequential)]
public struct PixelColor
{
    public byte Blue;
    public byte Green;
    public byte Red;
    public byte Alpha;
}

这是将像素(在200x200和300x300之间)修改为黑色的简单示例代码:

代码语言:javascript
复制
        int stride = 0;
        PixelColor[,] PixelData = wBitmap.CopyPixels(out stride);

        for (int i = 0; i < PixelData.GetLength(0); i++)
        {
            for (int j = 0; j < PixelData.GetLength(1); j++)
            {

                if ((200 < i && 300 > i) && (200 < j && 300 > j))
                {
                    PixelData[i, j].Blue = 0;
                    PixelData[i, j].Red = 0;
                    PixelData[i, j].Green = 0;

                }

            }
        }

        wBitmap.WritePixels(new Int32Rect(0, 0, wBitmap.PixelWidth, wBitmap.PixelHeight), PixelData, stride,0);

令人惊讶的结果是

这是一个具有500x500参数的图像。我预计结果将是图像中间的黑色填充正方形,而不是黑色垂直线。我的示例代码有什么问题?(线条后面的彩色圆点是原始图像的一部分。)

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47695380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档