C# Bitmap GetPixel 效率太低,太慢的替代方法
2021-03-30 14:24
标签:window oar ppa orm ppp bitmap object set code 新建类 使用时: 声明DirectBitmap实例,访问DirectBitmap的Bitmap即可。 使用DirectBitmap的GetPixel方法来获取颜色 C# Bitmap GetPixel 效率太低,太慢的替代方法 标签:window oar ppa orm ppp bitmap object set code 原文地址:https://www.cnblogs.com/xyz0835/p/9277582.html public class DirectBitmap : IDisposable
{
public Bitmap Bitmap { get; private set; }
int[] Bits = null;
public int Height { get; private set; }
public int Width { get; private set; }
protected GCHandle BitsHandle { get; private set; }
public DirectBitmap(int width, int height)
{
Width = width;
Height = height;
Bits = new int[width * height];
BitsHandle = GCHandle.Alloc(Bits, GCHandleType.Pinned);
Bitmap = new Bitmap(width, height, width * 4, PixelFormat.Format32bppPArgb, BitsHandle.AddrOfPinnedObject());
}
public void SetPixel(int x, int y, Color colour)
{
SetPixelRGB(x, y, colour.ToArgb());
}
public void SetPixelRGB(int x, int y, int colour)
{
Bits[x + (y * Width)] = colour;
}
public Color GetPixel(int x, int y)
{
return Color.FromArgb(GetPixelRGB(x, y));
}
public int GetPixelRGB(int x, int y)
{
return Bits[x + (y * Width)];
}
private bool Disposed = false;
public void Dispose()
{
if (Disposed)
return;
Disposed = true;
Bitmap.Dispose();
BitsHandle.Free();
}
}
DirectBitmap image = new DirectBitmap(rc.Right - rc.Left, rc.Bottom - rc.Top);
using (Graphics gp = Graphics.FromImage(image.Bitmap))
{
IntPtr dc = gp.GetHdc();
FormHelper.PrintWindow(handle, dc, 0);
gp.ReleaseHdc();
}
文章标题:C# Bitmap GetPixel 效率太低,太慢的替代方法
文章链接:http://soscw.com/index.php/essay/70015.html