www.pudn.com > GDIPlusCF.zip > Image.cs
using System;
using System.Collections.Generic;
using System.Text;
using OpenNETCF.Runtime.InteropServices.ComTypes;
namespace OpenNETCF.GDIPlus
{
public class ImagePlus : IDisposable
{
public ImagePlus(string filename, bool useEmbeddedColorManagement)
{
}
public ImagePlus(
IStream stream,
bool useEmbeddedColorManagement
)
{
NativeMethods.GdipLoadImageFromStream(stream, out nativeImage);
}
//static public ImagePlus FromFile(
// string filename,
// bool useEmbeddedColorManagement
//)
//{
//}
static public ImagePlus FromStream(
IStream stream,
bool useEmbeddedColorManagement
)
{
return new ImagePlus(stream, useEmbeddedColorManagement);
}
~ImagePlus()
{
}
// public virtual ImagePlus Clone()
// {
// }
//GpStatus Save(string filename,
// ref Guid clsidEncoder,
// EncoderParameters encoderParams )
//{
//}
//GpStatus Save(IStream stream,
// ref Guid clsidEncoder,
// EncoderParameters encoderParams )
//{
//}
// GpStatus SaveAdd(EncoderParameters encoderParams)
// {
// }
//GpStatus SaveAdd(ImagePlus newImage,
// EncoderParameters encoderParams)
//{
//}
//ImageType GetType() {}
public GpStatus GetPhysicalDimension(out GpSizeF size)
{
float width, height;
GpStatus status;
status = SetStatus(NativeMethods.GdipGetImageDimension(nativeImage,
out width, out height));
size.Width = width;
size.Height = height;
return status;
}
public GpStatus GetBounds(out GpRectF srcRect,
out Unit srcUnit)
{
return SetStatus(NativeMethods.GdipGetImageBounds(nativeImage,
out srcRect, out srcUnit));
}
public uint GetWidth()
{
GpRectF rc;
Unit unit;
GetBounds(out rc, out unit);
return (uint)rc.Width;
}
public uint GetHeight()
{
GpRectF rc;
Unit unit;
GetBounds(out rc, out unit);
return (uint)rc.Height;
}
//float GetHorizontalResolution();
//float GetVerticalResolution();
//uint GetFlags();
public GpStatus GetRawFormat(out Guid format)
{
return SetStatus(NativeMethods.GdipGetImageRawFormat(nativeImage, out format));
}
public System.Drawing.Imaging.PixelFormat GetPixelFormat()
{
System.Drawing.Imaging.PixelFormat format;
SetStatus(NativeMethods.GdipGetImagePixelFormat(nativeImage, out format));
return format;
}
//int GetPaletteSize();
//Status GetPalette(OUT ColorPalette* palette,
// int size);
//Status SetPalette(ColorPalette* palette);
//ImagePlus GetThumbnailImage(uint thumbWidth,
// uint thumbHeight);
//uint GetFrameDimensionsCount();
//GpStatus GetFrameDimensionsList(Guid[] dimensionIDs,
// uint count);
//uint GetFrameCount(ref Guid dimensionID);
//GpStatus SelectActiveFrame(ref Guid dimensionID,
// uint frameIndex);
//GpStatus RotateFlip(RotateFlipType rotateFlipType);
//uint GetPropertyCount();
//GpStatus GetPropertyIdList(uint numOfProperty,
// out PROPID[] list);
//uint GetPropertyItemSize(PROPID propId);
//Status GetPropertyItem(PROPID propId,
// uint propSize,
// OUT PropertyItem* buffer);
//Status GetPropertySize(OUT UINT* totalBufferSize,
// OUT UINT* numProperties);
//Status GetAllPropertyItems(uint totalBufferSize,
// uint numProperties,
// OUT PropertyItem* allItems);
//Status RemovePropertyItem(PROPID propId);
//Status SetPropertyItem(PropertyItem* item);
//uint GetEncoderParameterListSize(CLSID* clsidEncoder);
//Status GetEncoderParameterList(CLSID* clsidEncoder,
// uint size,
// OUT EncoderParameters* buffer);
public GpStatus GetLastStatus()
{
return lastResult;
}
internal ImagePlus() { }
internal ImagePlus(GpImage nativeImage, GpStatus status)
{
SetNativeImage(nativeImage);
}
internal void SetNativeImage(GpImage nativeImage)
{
this.nativeImage = nativeImage;
}
protected GpStatus SetStatus(GpStatus status)
{
if (status != GpStatus.Ok)
return (lastResult = status);
else
return status;
}
internal GpImage nativeImage;
protected GpStatus lastResult;
protected GpStatus loadStatus;
private ImagePlus(ImagePlus C)
{
NativeMethods.GdipCloneImage(C.nativeImage, out this.nativeImage);
}
#region IDisposable Members
public void Dispose()
{
if (nativeImage != IntPtr.Zero)
{
NativeMethods.GdipDisposeImage(nativeImage);
nativeImage = null;
}
}
#endregion
}
}