代码之家  ›  专栏  ›  技术社区  ›  devuxer

使用WPF应用程序中的C确定位图中像素的颜色

  •  1
  • devuxer  · 技术社区  · 14 年前

    到目前为止我找到的唯一方法是 System.Drawing.Bitmap.GetPixel() ,但Microsoft警告 System.Drawing 这让我想知道这是否是“老办法”。有什么选择吗?


    以下是微软所说的 系统图 命名空间。我还注意到,当我创建新的WPF项目时,System.Drawing程序集并没有自动添加到引用中。

    System.Drawing命名空间

    system.drawing名称空间提供对gdi+基本图形功能的访问。System.Drawing2d、System.Drawing.Imaging和System.Drawing.Text名称空间中提供了更高级的功能。

    图形类提供了绘制到显示设备的方法。矩形和点等类封装了gdi+基元。笔类用于绘制线条和曲线,而抽象类画笔派生的类用于填充形状的内部。

    注意安全

    不支持在Windows或ASP.NET服务中使用System.Drawing命名空间中的类。尝试在其中一个应用程序类型中使用这些类可能会产生意外的问题,例如服务性能降低和运行时异常。

    - http://msdn.microsoft.com/en-us/library/system.drawing.aspx

    2 回复  |  直到 14 年前
        1
  •  1
  •   Community ahmed    7 年前

    this question 最好的解释。但要回答您的问题,使用System.Drawing.Bitmap.GetPixel()方法没有任何错误或“旧”的地方。

        2
  •  3
  •   Rikker Serg    14 年前

    您可以使用此代码

        public Color GetPixel(BitmapSource bitmap, int x, int y)
        {
            Debug.Assert(bitmap != null);
            Debug.Assert(x >= 0);
            Debug.Assert(y >= 0);
            Debug.Assert(x < bitmap.PixelWidth);
            Debug.Assert(y < bitmap.PixelHeight);
            Debug.Assert(bitmap.Format.BitsPerPixel >= 24);
    
            CroppedBitmap cb = new CroppedBitmap(bitmap, new Int32Rect(x, y, 1, 1));
            byte[] pixel = new byte[bitmap.Format.BitsPerPixel / 8];
            cb.CopyPixels(pixel, bitmap.Format.BitsPerPixel / 8, 0);
            return Color.FromRgb(pixel[2], pixel[1], pixel[0]);
        }