|
|
/**************************************************************************\
* * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. * * Module Name: * * Bitmap.hpp * * Abstract: * * Bitmap related declarations * * Revision History: * * 4/26/2000 ericvan * Update header files. * * 12/09/1998 davidx * Created it. * \**************************************************************************/
#ifndef _GDIPLUSBITMAP_H
#define _GDIPLUSBITMAP_H
// NOTE:
// Our current choice for the public API is to use constructors
// instead of static load functions to create image objects.
//
// I've kept the static load functions here for now so that
// existing test programs are not broken. But they should
// eventually be taken out.
#ifndef DCR_USE_NEW_140782
inline Image::Image( IN const WCHAR* filename ) { nativeImage = NULL; lastResult = DllExports::GdipLoadImageFromFile(filename, &nativeImage); }
inline Image::Image( IN IStream* stream ) { nativeImage = NULL; lastResult = DllExports::GdipLoadImageFromStream(stream, &nativeImage); }
inline Image* Image::FromFile( IN const WCHAR* filename ) { return new Image(filename); }
inline Image* Image::FromStream( IN IStream* stream ) { return new Image(stream); }
#else
inline Image::Image( IN const WCHAR* filename, IN BOOL useEmbeddedColorManagement ) { nativeImage = NULL; if(useEmbeddedColorManagement) { lastResult = DllExports::GdipLoadImageFromFileICM( filename, &nativeImage ); } else { lastResult = DllExports::GdipLoadImageFromFile( filename, &nativeImage ); } }
inline Image::Image( IN IStream* stream, IN BOOL useEmbeddedColorManagement ) { nativeImage = NULL; if(useEmbeddedColorManagement) { lastResult = DllExports::GdipLoadImageFromStreamICM( stream, &nativeImage ); } else { lastResult = DllExports::GdipLoadImageFromStream( stream, &nativeImage ); } }
inline Image* Image::FromFile( IN const WCHAR* filename, IN BOOL useEmbeddedColorManagement ) { return new Image( filename, useEmbeddedColorManagement ); }
inline Image* Image::FromStream( IN IStream* stream, IN BOOL useEmbeddedColorManagement ) { return new Image( stream, useEmbeddedColorManagement ); }
#endif
inline Image::~Image() { DllExports::GdipDisposeImage(nativeImage); }
inline Image* Image::Clone() { GpImage *cloneimage = NULL;
SetStatus(DllExports::GdipCloneImage(nativeImage, &cloneimage));
return new Image(cloneimage, lastResult); }
// Encorder Parameter
inline UINT Image::GetEncoderParameterListSize( IN const CLSID* clsidEncoder ) { UINT size = 0;
SetStatus(DllExports::GdipGetEncoderParameterListSize(nativeImage, clsidEncoder, &size)); return size; }
inline Status Image::GetEncoderParameterList( IN const CLSID* clsidEncoder, IN UINT size, OUT EncoderParameters* buffer ) { return SetStatus(DllExports::GdipGetEncoderParameterList(nativeImage, clsidEncoder, size, buffer)); }
// Save images
inline Status Image::Save( IN const WCHAR* filename, IN const CLSID* clsidEncoder, IN const EncoderParameters *encoderParams ) { return SetStatus(DllExports::GdipSaveImageToFile(nativeImage, filename, clsidEncoder, encoderParams)); }
inline Status Image::Save( IN IStream* stream, IN const CLSID* clsidEncoder, IN const EncoderParameters *encoderParams ) { return SetStatus(DllExports::GdipSaveImageToStream(nativeImage, stream, clsidEncoder, encoderParams)); }
inline Status Image::SaveAdd( IN const EncoderParameters *encoderParams ) { return SetStatus(DllExports::GdipSaveAdd(nativeImage, encoderParams)); }
inline Status Image::SaveAdd( IN Image* newImage, IN const EncoderParameters *encoderParams ) { if ( newImage == NULL ) { return SetStatus(InvalidParameter); }
return SetStatus(DllExports::GdipSaveAddImage(nativeImage, newImage->nativeImage, encoderParams)); }
// Get size and type information
inline ImageType Image::GetType() const { ImageType type = ImageTypeUnknown;
SetStatus(DllExports::GdipGetImageType(nativeImage, &type));
return type; }
inline Status Image::GetPhysicalDimension( OUT SizeF* size ) { if (size == NULL) { return SetStatus(InvalidParameter); } REAL width, height; Status status;
status = SetStatus(DllExports::GdipGetImageDimension(nativeImage, &width, &height));
size->Width = width; size->Height = height;
return status; }
inline Status Image::GetBounds( OUT RectF *srcRect, OUT Unit *srcUnit ) { return SetStatus(DllExports::GdipGetImageBounds(nativeImage, srcRect, srcUnit)); }
inline UINT Image::GetWidth() { UINT width = 0;
SetStatus(DllExports::GdipGetImageWidth(nativeImage, &width));
return width; }
inline UINT Image::GetHeight() { UINT height = 0;
SetStatus(DllExports::GdipGetImageHeight(nativeImage, &height));
return height; }
inline REAL Image::GetHorizontalResolution() { REAL resolution = 0.0f;
SetStatus(DllExports::GdipGetImageHorizontalResolution(nativeImage, &resolution));
return resolution; }
inline REAL Image::GetVerticalResolution() { REAL resolution = 0.0f;
SetStatus(DllExports::GdipGetImageVerticalResolution(nativeImage, &resolution));
return resolution; }
inline UINT Image::GetFlags() { UINT flags = 0;
SetStatus(DllExports::GdipGetImageFlags(nativeImage, &flags));
return flags; }
inline Status Image::GetRawFormat(OUT GUID *format) { return SetStatus(DllExports::GdipGetImageRawFormat(nativeImage, format)); }
inline PixelFormat Image::GetPixelFormat() { PixelFormat format;
SetStatus(DllExports::GdipGetImagePixelFormat(nativeImage, &format));
return format; }
inline INT Image::GetPaletteSize() { INT size = 0; SetStatus(DllExports::GdipGetImagePaletteSize(nativeImage, &size)); return size; }
inline Status Image::GetPalette( OUT ColorPalette *palette, IN INT size ) { return SetStatus(DllExports::GdipGetImagePalette(nativeImage, palette, size)); }
inline Status Image::SetPalette( IN const ColorPalette *palette ) { return SetStatus(DllExports::GdipSetImagePalette(nativeImage, palette)); }
// Thumbnail support
inline Image* Image::GetThumbnailImage( IN UINT thumbWidth, IN UINT thumbHeight, IN GetThumbnailImageAbort callback, IN VOID* callbackData ) { GpImage *thumbimage = NULL;
SetStatus(DllExports::GdipGetImageThumbnail(nativeImage, thumbWidth, thumbHeight, &thumbimage, callback, callbackData));
Image *newImage = new Image(thumbimage, lastResult);
if (newImage == NULL) { DllExports::GdipDisposeImage(thumbimage); }
return newImage; }
// Multi-frame support
inline UINT Image::GetFrameDimensionsCount() { UINT count = 0;
SetStatus(DllExports::GdipImageGetFrameDimensionsCount(nativeImage, &count));
return count; }
inline Status Image::GetFrameDimensionsList( OUT GUID* dimensionIDs, IN UINT count ) { return SetStatus(DllExports::GdipImageGetFrameDimensionsList(nativeImage, dimensionIDs, count)); }
inline UINT Image::GetFrameCount( IN const GUID* dimensionID ) { UINT count = 0;
SetStatus(DllExports::GdipImageGetFrameCount(nativeImage, dimensionID, &count)); return count; }
inline Status Image::SelectActiveFrame( IN const GUID *dimensionID, IN UINT frameIndex ) { return SetStatus(DllExports::GdipImageSelectActiveFrame(nativeImage, dimensionID, frameIndex)); }
// Image property related functions
inline UINT Image::GetPropertyCount() { UINT numProperty = 0;
SetStatus(DllExports::GdipGetPropertyCount(nativeImage, &numProperty));
return numProperty; }
inline Status Image::GetPropertyIdList( IN UINT numOfProperty, OUT PROPID* list ) { return SetStatus(DllExports::GdipGetPropertyIdList(nativeImage, numOfProperty, list)); } inline UINT Image::GetPropertyItemSize( IN PROPID propId ) { UINT size = 0;
SetStatus(DllExports::GdipGetPropertyItemSize(nativeImage, propId, &size));
return size; }
inline Status Image::GetPropertyItem( IN PROPID propId, IN UINT propSize, OUT PropertyItem* buffer ) { return SetStatus(DllExports::GdipGetPropertyItem(nativeImage, propId, propSize, buffer)); }
inline Status Image::GetPropertySize( OUT UINT* totalBufferSize, OUT UINT* numProperties ) { return SetStatus(DllExports::GdipGetPropertySize(nativeImage, totalBufferSize, numProperties)); }
inline Status Image::GetAllPropertyItems( IN UINT totalBufferSize, IN UINT numProperties, OUT PropertyItem* allItems ) { if (allItems == NULL) { return SetStatus(InvalidParameter); } return SetStatus(DllExports::GdipGetAllPropertyItems(nativeImage, totalBufferSize, numProperties, allItems)); }
inline Status Image::RemovePropertyItem( IN PROPID propId ) { return SetStatus(DllExports::GdipRemovePropertyItem(nativeImage, propId)); }
inline Status Image::SetPropertyItem( IN const PropertyItem* item ) { return SetStatus(DllExports::GdipSetPropertyItem(nativeImage, item)); }
// Get/SetLayout
// Support for Middle East localization (right-to-left mirroring)
inline ImageLayout Image::GetLayout() const { ImageLayout layout;
SetStatus(DllExports::GdipGetImageLayout(nativeImage, &layout));
return layout; }
inline Status Image::SetLayout(IN const ImageLayout layout) { SetStatus(DllExports::GdipSetImageLayout(nativeImage, layout)); }
inline Status Image::GetLastStatus() const { Status lastStatus = lastResult; lastResult = Ok;
return lastStatus; }
inline Image::Image(GpImage *nativeImage, Status status) { SetNativeImage(nativeImage); lastResult = status; }
inline VOID Image::SetNativeImage(GpImage *nativeImage) { this->nativeImage = nativeImage; }
inline Bitmap::Bitmap( IN const WCHAR *filename, IN BOOL useEmbeddedColorManagement ) { GpBitmap *bitmap = NULL;
if(useEmbeddedColorManagement) { lastResult = DllExports::GdipCreateBitmapFromFileICM(filename, &bitmap); } else { lastResult = DllExports::GdipCreateBitmapFromFile(filename, &bitmap); }
SetNativeImage(bitmap); }
inline Bitmap::Bitmap( IN IStream *stream, IN BOOL useEmbeddedColorManagement ) { GpBitmap *bitmap = NULL;
if(useEmbeddedColorManagement) { lastResult = DllExports::GdipCreateBitmapFromStreamICM(stream, &bitmap); } else { lastResult = DllExports::GdipCreateBitmapFromStream(stream, &bitmap); }
SetNativeImage(bitmap); }
inline Bitmap::Bitmap( IN INT width, IN INT height, IN INT stride, IN PixelFormat format, IN BYTE *scan0 ) { GpBitmap *bitmap = NULL;
lastResult = DllExports::GdipCreateBitmapFromScan0(width, height, stride, format, scan0, &bitmap);
SetNativeImage(bitmap); }
inline Bitmap::Bitmap( IN INT width, IN INT height, IN PixelFormat format ) { GpBitmap *bitmap = NULL;
lastResult = DllExports::GdipCreateBitmapFromScan0(width, height, 0, format, NULL, &bitmap);
SetNativeImage(bitmap); }
inline Bitmap::Bitmap( IN INT width, IN INT height, IN Graphics* target) { GpBitmap *bitmap = NULL;
lastResult = DllExports::GdipCreateBitmapFromGraphics(width, height, target->nativeGraphics, &bitmap);
SetNativeImage(bitmap); }
inline Bitmap::Bitmap( IN IDirectDrawSurface7 * surface ) { GpBitmap *bitmap = NULL;
lastResult = DllExports::GdipCreateBitmapFromDirectDrawSurface(surface, &bitmap);
SetNativeImage(bitmap); }
inline Bitmap::Bitmap( IN const BITMAPINFO* gdiBitmapInfo, IN VOID* gdiBitmapData ) { GpBitmap *bitmap = NULL;
lastResult = DllExports::GdipCreateBitmapFromGdiDib(gdiBitmapInfo, gdiBitmapData, &bitmap);
SetNativeImage(bitmap); }
inline Bitmap::Bitmap( IN HBITMAP hbm, IN HPALETTE hpal ) { GpBitmap *bitmap = NULL;
lastResult = DllExports::GdipCreateBitmapFromHBITMAP(hbm, hpal, &bitmap);
SetNativeImage(bitmap); }
inline Bitmap::Bitmap( IN HICON hicon ) { GpBitmap *bitmap = NULL;
lastResult = DllExports::GdipCreateBitmapFromHICON(hicon, &bitmap);
SetNativeImage(bitmap); }
inline Bitmap::Bitmap( IN HINSTANCE hInstance, IN const WCHAR *bitmapName ) { GpBitmap *bitmap = NULL;
lastResult = DllExports::GdipCreateBitmapFromResource(hInstance, bitmapName, &bitmap);
SetNativeImage(bitmap); }
inline Bitmap* Bitmap::FromFile( IN const WCHAR *filename, IN BOOL useEmbeddedColorManagement ) { return new Bitmap( filename, useEmbeddedColorManagement ); }
inline Bitmap* Bitmap::FromStream( IN IStream *stream, IN BOOL useEmbeddedColorManagement ) { return new Bitmap( stream, useEmbeddedColorManagement ); }
inline Bitmap* Bitmap::FromDirectDrawSurface7( IN IDirectDrawSurface7* surface ) { return new Bitmap(surface); }
inline Bitmap* Bitmap::FromBITMAPINFO( IN const BITMAPINFO* gdiBitmapInfo, IN VOID* gdiBitmapData) { return new Bitmap(gdiBitmapInfo, gdiBitmapData); }
inline Bitmap* Bitmap::FromHBITMAP( IN HBITMAP hbm, IN HPALETTE hpal ) { return new Bitmap(hbm, hpal); }
inline Bitmap* Bitmap::FromHICON( IN HICON hicon ) { return new Bitmap(hicon); }
inline Bitmap* Bitmap::FromResource( IN HINSTANCE hInstance, IN const WCHAR *bitmapName) { return new Bitmap(hInstance, bitmapName); }
inline Status Bitmap::GetHBITMAP( IN const Color& colorBackground, OUT HBITMAP* hbmReturn ) { return SetStatus(DllExports::GdipCreateHBITMAPFromBitmap( static_cast<GpBitmap*>(nativeImage), hbmReturn, colorBackground.GetValue())); }
inline Status Bitmap::GetHICON( OUT HICON* hiconReturn ) { return SetStatus(DllExports::GdipCreateHICONFromBitmap( static_cast<GpBitmap*>(nativeImage), hiconReturn)); }
inline Bitmap* Bitmap::Clone( IN const Rect& rect, IN PixelFormat format ) { return Clone(rect.X, rect.Y, rect.Width, rect.Height, format); }
inline Bitmap* Bitmap::Clone( IN INT x, IN INT y, IN INT width, IN INT height, IN PixelFormat format ) { GpBitmap* gpdstBitmap = NULL; Bitmap* bitmap;
lastResult = DllExports::GdipCloneBitmapAreaI( x, y, width, height, format, (GpBitmap *)nativeImage, &gpdstBitmap);
if (lastResult == Ok) { bitmap = new Bitmap(gpdstBitmap);
if (bitmap == NULL) { DllExports::GdipDisposeImage(gpdstBitmap); }
return bitmap; } else return NULL; }
inline Bitmap* Bitmap::Clone( IN const RectF& rect, IN PixelFormat format ) { return Clone(rect.X, rect.Y, rect.Width, rect.Height, format); }
inline Bitmap* Bitmap::Clone( IN REAL x, IN REAL y, IN REAL width, IN REAL height, IN PixelFormat format ) { GpBitmap* gpdstBitmap = NULL; Bitmap* bitmap;
SetStatus(DllExports::GdipCloneBitmapArea( x, y, width, height, format, (GpBitmap *)nativeImage, &gpdstBitmap));
if (lastResult == Ok) { bitmap = new Bitmap(gpdstBitmap);
if (bitmap == NULL) { DllExports::GdipDisposeImage(gpdstBitmap); }
return bitmap; } else return NULL; }
inline Bitmap::Bitmap(GpBitmap *nativeBitmap) { SetNativeImage(nativeBitmap); }
inline Status Bitmap::LockBits( IN const Rect& rect, IN UINT flags, IN PixelFormat format, OUT BitmapData* lockedBitmapData ) { return SetStatus(DllExports::GdipBitmapLockBits( static_cast<GpBitmap*>(nativeImage), &rect, flags, format, lockedBitmapData)); }
inline Status Bitmap::UnlockBits( IN BitmapData* lockedBitmapData ) { return SetStatus(DllExports::GdipBitmapUnlockBits( static_cast<GpBitmap*>(nativeImage), lockedBitmapData)); }
inline Status Bitmap::GetPixel( IN INT x, IN INT y, OUT Color *color) { ARGB argb;
Status status = SetStatus(DllExports::GdipBitmapGetPixel( static_cast<GpBitmap *>(nativeImage), x, y, &argb));
if (status == Ok) { color->SetValue(argb); }
return status; }
inline Status Bitmap::SetPixel( IN INT x, IN INT y, IN const Color& color) { return SetStatus(DllExports::GdipBitmapSetPixel( static_cast<GpBitmap *>(nativeImage), x, y, color.GetValue())); }
inline Status Bitmap::SetResolution( IN REAL xdpi, IN REAL ydpi) { return SetStatus(DllExports::GdipBitmapSetResolution( static_cast<GpBitmap *>(nativeImage), xdpi, ydpi)); }
#endif
|