New class
Public classdirectbitmap:idisposable { PublicBitmap Bitmap {Get;Private Set; } int[] Bits =NULL; Public intHeight {Get;Private Set; } Public intWidth {Get;Private Set; } protectedGCHandle Bitshandle {Get;Private Set; } PublicDirectbitmap (intWidthintheight) {Width=width; Height=height; Bits=New int[Width *height]; Bitshandle=GCHandle.Alloc (Bits, gchandletype.pinned); Bitmap=NewBitmap (width, height, Width *4, Pixelformat.format32bpppargb, Bitshandle.addrofpinnedobject ()); } Public voidSetPixel (intXinty, Color colour) {Setpixelrgb (x, y, colour). ToArgb ()); } Public voidSetpixelrgb (intXintYintcolour) {bits[x+ (Y * Width)] =colour; } PublicColor GetPixel (intXinty) {returnColor.FromArgb (Getpixelrgb (x, y)); } Public intGetpixelrgb (intXinty) {returnBits[x + (Y *Width)]; } Private BOOLdisposed =false; Public voidDispose () {if(disposed)return; Disposed=true; Bitmap.dispose (); Bitshandle.free (); } }
When used:
Declare the Directbitmap instance and access the bitmap of the Directbitmap. Use Directbitmap's GetPixel method to get the color
New Directbitmap (RC. RIGHT-RC. Left, RC. Bottom- RC. TOP); using (Graphics GP = graphics.fromimage (image). Bitmap)) { = GP. GetHdc (); 0 ); Gp. ReleaseHdc (); }
C # Bitmap GetPixel inefficient, too slow alternative method