|
- /**************************************************************************\
- *
- * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved.
- *
- * Module Name:
- *
- * GdiplusBitmap.h
- *
- * Abstract:
- *
- * Bitmap related declarations
- *
- \**************************************************************************/
-
- #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));
- }
-
- inline Status
- Image::RotateFlip(
- IN RotateFlipType rotateFlipType
- )
- {
- return SetStatus(DllExports::GdipImageRotateFlip(nativeImage,
- rotateFlipType));
- }
-
- // 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)
- {
- return 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)
- {
- lastResult = Ok;
-
- 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
|