www.pudn.com > GDIPlusCF.zip > BitmapPlus.cs


using System; 
using System.Collections.Generic; 
using System.Text; 
using OpenNETCF.Runtime.InteropServices.ComTypes; 
using Color = System.Drawing.Color; 
using PixelFormat = System.Drawing.Imaging.PixelFormat; 
using BitmapData = System.Drawing.Imaging.BitmapData; 
 
namespace OpenNETCF.GDIPlus 
{ 
    public class BitmapPlus: ImagePlus 
    { 
public BitmapPlus(string filename) 
{ 
    GpBitmap bitmap = new GpBitmap(); 
 
        lastResult = NativeMethods.GdipCreateBitmapFromFileICM(filename, out bitmap); 
 
    SetNativeImage((GpImage)(IntPtr)bitmap); 
} 
 
  
public BitmapPlus(IStream stream) 
{ 
    GpBitmap bitmap = new GpBitmap(); 
 
        lastResult = NativeMethods.GdipCreateBitmapFromStreamICM(stream, out bitmap); 
 
    SetNativeImage((GpImage)(IntPtr)bitmap); 
} 
 
 
public BitmapPlus( 
    int width, 
    int height, 
    int stride, 
    PixelFormat format, 
    IntPtr scan0 
    ) 
{ 
    GpBitmap bitmap = new GpBitmap(); 
 
    lastResult = NativeMethods.GdipCreateBitmapFromScan0(width, 
                                                       height, 
                                                       stride, 
                                                       format, 
                                                       scan0, 
                                                       out bitmap); 
 
    SetNativeImage((GpImage)(IntPtr)bitmap); 
} 
 
  
public BitmapPlus( 
    int width, 
    int height, 
    PixelFormat format 
    ) 
{ 
    GpBitmap bitmap = new GpBitmap(); 
 
    lastResult = NativeMethods.GdipCreateBitmapFromScan0(width, 
                                                       height, 
                                                       0, 
                                                       format, 
                                                       IntPtr.Zero, 
                                                       out bitmap); 
 
    SetNativeImage((GpImage)(IntPtr)bitmap); 
} 
 
 
public BitmapPlus( 
    int width,  
    int height,  
    GraphicsPlus target) 
{ 
    GpBitmap bitmap = new GpBitmap(); 
 
    lastResult = NativeMethods.GdipCreateBitmapFromGraphics(width, 
                                                          height, 
                                                          target.nativeGraphics, 
                                                          out bitmap); 
 
    SetNativeImage((GpImage)(IntPtr)bitmap); 
} 
 
/*  
public Bitmap( 
    BITMAPINFO* gdiBitmapInfo,  
    VOID* gdiBitmapData 
    ) 
{ 
    GpBitmap bitmap = new GpBitmap(); 
 
    lastResult = NativeMethods.GdipCreateBitmapFromGdiDib(gdiBitmapInfo, 
                                                        gdiBitmapData, 
                                                        out bitmap); 
 
    SetNativeImage((GpImage)(IntPtr)bitmap); 
} 
*/ 
  
public BitmapPlus( 
    HBITMAP hbm,  
    IntPtr hpal 
    ) 
{ 
    GpBitmap bitmap = new GpBitmap(); 
 
    lastResult = NativeMethods.GdipCreateBitmapFromHBITMAP(hbm, hpal, out bitmap); 
 
    SetNativeImage((GpImage)(IntPtr)bitmap); 
} 
 
  
  
   
public BitmapPlus FromFile( 
    string filename) 
{ 
    return new BitmapPlus(filename); 
} 
 
   
public BitmapPlus FromStream(IStream stream) 
{ 
    return new BitmapPlus(stream); 
} 
 
  
  
public BitmapPlus FromHBITMAP( 
    HBITMAP hbm,  
    IntPtr hpal 
    ) 
{ 
    return new BitmapPlus(hbm, hpal); 
} 
 
 
  
public GpStatus GetHBITMAP( 
    Color colorBackground, 
    out HBITMAP hbmReturn 
    ) 
{ 
    return SetStatus(NativeMethods.GdipCreateHBITMAPFromBitmap( 
                                    (GpBitmap)(IntPtr)nativeImage, 
                                        out hbmReturn, 
                                        colorBackground.ToArgb())); 
} 
 
 
   
 
 public BitmapPlus(GpBitmap nativeBitmap) 
{ 
    lastResult = GpStatus. Ok; 
 
    SetNativeImage((IntPtr)nativeBitmap); 
} 
 
  
public GpStatus LockBits( 
    GpRect rect, 
    uint flags, 
    PixelFormat format, 
    BitmapData lockedBitmapData 
) 
{ 
    return SetStatus(NativeMethods.GdipBitmapLockBits( 
                                    (GpBitmap)(IntPtr)nativeImage, 
                                    rect, 
                                    flags, 
                                    format, 
                                    lockedBitmapData)); 
} 
 
  
public GpStatus UnlockBits(BitmapData lockedBitmapData) 
{ 
    return SetStatus(NativeMethods.GdipBitmapUnlockBits( 
                                    (GpBitmap)(IntPtr)nativeImage, 
                                    lockedBitmapData)); 
} 
 
  
public GpStatus GetPixel( 
    int x,  
    int y,  
    out Color color)  
{ 
    int argb; 
    color = Color.Transparent; 
    GpStatus status = SetStatus(NativeMethods.GdipBitmapGetPixel( 
                                    (GpBitmap)(IntPtr)nativeImage, 
        x, y,         
        out argb)); 
 
    if (status == GpStatus.Ok)  
    { 
        color = Color.FromArgb(argb); 
    } 
 
    return  status; 
} 
 
  
public GpStatus SetPixel( 
    int x,  
    int y,  
    Color color)  
{ 
    return SetStatus(NativeMethods.GdipBitmapSetPixel( 
                                    (GpBitmap)(IntPtr)nativeImage, 
        x, y, 
        color.ToArgb())); 
} 
 
 
 
 
    } 
}