我们知道在.NET 平台下主要是用GDI+来进行图形图像处理,在效率要求不高的情况下使用GDI+已经足够实现各种功能了,但一旦要求效率的情况下,我们可以考虑使用GDI来代替GDI+,网上有人士做过相关测试(本人也测试过),GDI在图形、图像绘制方面效率较GDI+有很大提高。下面将自己开发过程中整理到的NativeGdi32Api类贴出来:
public static class NativeGdi32Api
{
[ DllImport("gdi32.dll" )]
public static extern int SetDIBits (IntPtr hdc, IntPtr hBitmap, int nStartScan , int nNumScans, IntPtr lpBits, IntPtr lpBI , int wUsage);
[ DllImport("gdi32.dll" )]
public static extern int SetDIBitsToDevice (IntPtr hdc, int x, int y , int dx, int dy, int SrcX, int SrcY, int Scan , int NumScans, IntPtr Bits, IntPtr BitsInfo , int wUsage);
[ DllImport("gdi32.dll" )]
public static extern IntPtr CreateDIBSection (IntPtr hdc, IntPtr pBitmapInfo, int un , IntPtr lplpVoid , IntPtr handle, int dw);
[ DllImport("gdi32.dll" , CharSet = CharSet.Auto )]
public static extern int SetPixel (IntPtr hdc, int x, int y , int crColor);
[ DllImport("gdi32.dll" , CharSet = CharSet.Auto )]
public static extern int GetPixel (IntPtr hdc, int x, int y );
[ DllImport("gdi32.dll" , CharSet= CharSet.Auto )]
public static extern int CombineRgn (IntPtr dest, IntPtr src1, IntPtr src2 , int flags);
[ DllImport("gdi32.dll" , CharSet= CharSet.Auto )]
public static extern IntPtr CreateBrushIndirect (ref LOGBRUSH brush );
[ DllImport("gdi32.dll" , CharSet= CharSet.Auto )]
publ