从图形对象 GDI+ 获取/设置像素



我正在尝试找到一种替代解决方案来获取/设置图形对象中某个位置的像素。现在我正在使用 GDI 函数:

    [DllImport("gdi32.dll")]
    public static extern int GetPixel(System.IntPtr hdc,  int nXPos,  int nYPos);
    [DllImport("gdi32.dll")]
    public static extern uint SetPixel(IntPtr hdc, int X, int Y, int crColor);

我找不到GDI+的任何内容。GetPixel/SetPixel似乎只在Bitmap对象上。gdi32.dll 的替代方案在图形由屏幕支持时效果很好,但当将图形与位图一起使用时,它不再工作(GetPixel 返回黑色,因为这适用于另一个位图而不是实际位图): http://support.microsoft.com/kb/311221

一些示例代码:

private void ChangeImage(Graphics g)
{
        IntPtr gDC = IntPtr.Zero;
            try
            {
                gDC = g.GetHdc();

                // get the pixel color
                Color pixel = ColorTranslator.FromWin32(GetPixel(gDC, x, y));

                //change pixel object and persist
                SetPixel(gDC, x, y, ColorTranslator.ToWin32(pixel));
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }
            finally
            {
                if (gDC != IntPtr.Zero)
                    g.ReleaseHdc(gDC);
            }
}

有没有办法解析每像素的图形对象?Graphics 对象表示用户可以在其中自由添加任何对象(包括手绘图)的表面。最重要的是,我需要在某些屏幕部分应用滤镜(如模糊或像素化),所以我需要访问图形中已经绘制的内容。我还尝试找到一种方法将当前图形保存到位图并使用位图对象中的 GetPixel,但我也找不到保存图形内容的方法。

感谢

不,无法直接从图形对象读取像素。您需要访问底层 HDC 或位图对象才能执行此操作。

    Dim bmap As New Bitmap(550, 100)
    Dim g As Graphics = Graphics.FromImage(bmap)
    ' Dont use the Graphics interface, use the BitMap interface
    DIM col as color = bmap.GetPixel(x,y)

相关内容

  • 没有找到相关文章

最新更新