我正在尝试寻找一种替代解决方案来获取/设置Graphics对象中某个位置的像素。 现在我正在使用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返回黑色,因为这适用于另一个位图而不是实际位图):{{3} }
一些示例代码:
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对象? Graphics对象表示用户可以自由添加任何对象(包括手绘)的表面。除此之外,我需要在某些屏幕部件上应用滤镜(如模糊或像素化),因此我需要访问已在图形中绘制的内容。 我也试图找到一种方法将当前图形保存到Bitmap并使用位图对象中的GetPixel,但我也找不到保存图形内容的方法。
THX
答案 0 :(得分:2)
不,直接读取Graphics对象的像素是不可能的。您需要访问底层的HDC或Bitmap对象才能执行此操作。
答案 1 :(得分:0)
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)