|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004 |
- /**************************************************************************\
- *
- * 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
|