| @@ -252,6 +252,10 @@ unit glBitmap; | |||
| // activate to enable Lazarus TPortableNetworkGraphic support | |||
| // if you enable this pngImage and libPNG will be ignored | |||
| {$DEFINE GLB_LAZ_PNG} | |||
| // activate to enable png support with the unit pngimage -> http://pngdelphi.sourceforge.net/ | |||
| // if you enable pngimage the libPNG will be ignored | |||
| {.$DEFINE GLB_PNGIMAGE} | |||
| @@ -262,6 +266,10 @@ unit glBitmap; | |||
| // activate to enable Lazarus TJPEGImage support | |||
| // if you enable this delphi jpegs and libJPEG will be ignored | |||
| {$DEFINE GLB_LAZ_JPEG} | |||
| // if you enable delphi jpegs the libJPEG will be ignored | |||
| {.$DEFINE GLB_DELPHI_JPEG} | |||
| @@ -306,18 +314,32 @@ unit glBitmap; | |||
| {$MESSAGE warn 'SDL_image won''t work without SDL. SDL will be activated.'} | |||
| {$DEFINE GLB_SDL} | |||
| {$ENDIF} | |||
| {$IFDEF GLB_LAZ_PNG} | |||
| {$MESSAGE warn 'The Lazarus TPortableNetworkGraphics will be ignored because you are using SDL_image.'} | |||
| {$undef GLB_LAZ_PNG} | |||
| {$ENDIF} | |||
| {$IFDEF GLB_PNGIMAGE} | |||
| {$MESSAGE warn 'The unit pngimage will be ignored because you are using SDL_image.'} | |||
| {$undef GLB_PNGIMAGE} | |||
| {$ENDIF} | |||
| {$IFDEF GLB_LAZ_JPEG} | |||
| {$MESSAGE warn 'The Lazarus TJPEGImage will be ignored because you are using SDL_image.'} | |||
| {$undef GLB_LAZ_JPEG} | |||
| {$ENDIF} | |||
| {$IFDEF GLB_DELPHI_JPEG} | |||
| {$MESSAGE warn 'The unit JPEG will be ignored because you are using SDL_image.'} | |||
| {$undef GLB_DELPHI_JPEG} | |||
| {$ENDIF} | |||
| {$IFDEF GLB_LIB_PNG} | |||
| {$MESSAGE warn 'The library libPNG will be ignored because you are using SDL_image.'} | |||
| {$undef GLB_LIB_PNG} | |||
| {$ENDIF} | |||
| {$IFDEF GLB_LIB_JPEG} | |||
| {$MESSAGE warn 'The library libJPEG will be ignored because you are using SDL_image.'} | |||
| {$undef GLB_LIB_JPEG} | |||
| @@ -327,6 +349,27 @@ unit glBitmap; | |||
| {$DEFINE GLB_SUPPORT_JPEG_READ} | |||
| {$ENDIF} | |||
| // Lazarus TPortableNetworkGraphic | |||
| {$IFDEF GLB_LAZ_PNG} | |||
| {$IFNDEF GLB_LAZARUS} | |||
| {$MESSAGE warn 'Lazarus TPortableNetworkGraphic won''t work without Lazarus. Lazarus will be activated.'} | |||
| {$DEFINE GLB_LAZARUS} | |||
| {$ENDIF} | |||
| {$IFDEF GLB_PNGIMAGE} | |||
| {$MESSAGE warn 'The pngimage will be ignored if you are using Lazarus TPortableNetworkGraphic.'} | |||
| {$undef GLB_PNGIMAGE} | |||
| {$ENDIF} | |||
| {$IFDEF GLB_LIB_PNG} | |||
| {$MESSAGE warn 'The library libPNG will be ignored if you are using Lazarus TPortableNetworkGraphic.'} | |||
| {$undef GLB_LIB_PNG} | |||
| {$ENDIF} | |||
| {$DEFINE GLB_SUPPORT_PNG_READ} | |||
| {$DEFINE GLB_SUPPORT_PNG_WRITE} | |||
| {$ENDIF} | |||
| // PNG Image | |||
| {$IFDEF GLB_PNGIMAGE} | |||
| {$IFDEF GLB_LIB_PNG} | |||
| @@ -344,6 +387,27 @@ unit glBitmap; | |||
| {$DEFINE GLB_SUPPORT_PNG_WRITE} | |||
| {$ENDIF} | |||
| // Lazarus TJPEGImage | |||
| {$IFDEF GLB_LAZ_JPEG} | |||
| {$IFNDEF GLB_LAZARUS} | |||
| {$MESSAGE warn 'Lazarus TJPEGImage won''t work without Lazarus. Lazarus will be activated.'} | |||
| {$DEFINE GLB_LAZARUS} | |||
| {$ENDIF} | |||
| {$IFDEF GLB_DELPHI_JPEG} | |||
| {$MESSAGE warn 'The Delphi JPEGImage will be ignored if you are using the Lazarus TJPEGImage.'} | |||
| {$undef GLB_DELPHI_JPEG} | |||
| {$ENDIF} | |||
| {$IFDEF GLB_LIB_JPEG} | |||
| {$MESSAGE warn 'The library libJPEG will be ignored if you are using the Lazarus TJPEGImage.'} | |||
| {$undef GLB_LIB_JPEG} | |||
| {$ENDIF} | |||
| {$DEFINE GLB_SUPPORT_JPEG_READ} | |||
| {$DEFINE GLB_SUPPORT_JPEG_WRITE} | |||
| {$ENDIF} | |||
| // JPEG Image | |||
| {$IFDEF GLB_DELPHI_JPEG} | |||
| {$IFDEF GLB_LIB_JPEG} | |||
| @@ -377,19 +441,19 @@ unit glBitmap; | |||
| interface | |||
| uses | |||
| {$IFNDEF GLB_NATIVE_OGL} dglOpenGL, {$ENDIF} | |||
| {$IFNDEF GLB_NATIVE_OGL} dglOpenGL, {$ENDIF} | |||
| {$IF DEFINED(GLB_WIN) AND | |||
| DEFINED(GLB_NATIVE_OGL)} windows, {$IFEND} | |||
| DEFINED(GLB_NATIVE_OGL)} windows, {$IFEND} | |||
| {$IFDEF GLB_SDL} SDL, {$ENDIF} | |||
| {$IFDEF GLB_LAZARUS} IntfGraphics, GraphType, {$ENDIF} | |||
| {$IFDEF GLB_DELPHI} Dialogs, Graphics, {$ENDIF} | |||
| {$IFDEF GLB_SDL} SDL, {$ENDIF} | |||
| {$IFDEF GLB_LAZARUS} IntfGraphics, GraphType, Graphics, {$ENDIF} | |||
| {$IFDEF GLB_DELPHI} Dialogs, Graphics, {$ENDIF} | |||
| {$IFDEF GLB_SDL_IMAGE} SDL_image, {$ENDIF} | |||
| {$IFDEF GLB_PNGIMAGE} pngimage, {$ENDIF} | |||
| {$IFDEF GLB_LIB_PNG} libPNG, {$ENDIF} | |||
| {$IFDEF GLB_DELPHI_JPEG} JPEG, {$ENDIF} | |||
| {$IFDEF GLB_LIB_JPEG} libJPEG, {$ENDIF} | |||
| {$IFDEF GLB_SDL_IMAGE} SDL_image, {$ENDIF} | |||
| {$IFDEF GLB_PNGIMAGE} pngimage, {$ENDIF} | |||
| {$IFDEF GLB_LIB_PNG} libPNG, {$ENDIF} | |||
| {$IFDEF GLB_DELPHI_JPEG} JPEG, {$ENDIF} | |||
| {$IFDEF GLB_LIB_JPEG} libJPEG, {$ENDIF} | |||
| Classes, SysUtils; | |||
| @@ -5621,11 +5685,45 @@ begin | |||
| end; | |||
| {$IFDEF GLB_SUPPORT_PNG_READ} | |||
| {$IF DEFINED(GLB_SDL_IMAGE)} | |||
| {$IF DEFINED(GLB_LAZ_PNG)} | |||
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| //PNG///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| function TglBitmap.LoadPNG(const aStream: TStream): Boolean; | |||
| var | |||
| png: TPortableNetworkGraphic; | |||
| intf: TLazIntfImage; | |||
| StreamPos: Int64; | |||
| begin | |||
| result := true; | |||
| StreamPos := aStream.Position; | |||
| png := TPortableNetworkGraphic.Create; | |||
| try try | |||
| png.LoadFromStream(aStream); | |||
| intf := png.CreateIntfImage; | |||
| try try | |||
| AssignFromLazIntfImage(intf); | |||
| except | |||
| result := false; | |||
| aStream.Position := StreamPos; | |||
| exit; | |||
| end; | |||
| finally | |||
| intf.Free; | |||
| end; | |||
| except | |||
| result := false; | |||
| aStream.Position := StreamPos; | |||
| exit; | |||
| end; | |||
| finally | |||
| png.Free; | |||
| end; | |||
| end; | |||
| {$ELSEIF DEFINED(GLB_SDL_IMAGE)} | |||
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| function TglBitmap.LoadPNG(const aStream: TStream): Boolean; | |||
| var | |||
| Surface: PSDL_Surface; | |||
| RWops: PSDL_RWops; | |||
| @@ -5866,7 +5964,27 @@ begin | |||
| end; | |||
| {$ENDIF} | |||
| {$IF DEFINED(GLB_LIB_PNG)} | |||
| {$IF DEFINED(GLB_LAZ_PNG)} | |||
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TglBitmap.SavePNG(const aStream: TStream); | |||
| var | |||
| png: TPortableNetworkGraphic; | |||
| intf: TLazIntfImage; | |||
| begin | |||
| png := TPortableNetworkGraphic.Create; | |||
| intf := TLazIntfImage.Create(0, 0); | |||
| try | |||
| if not AssignToLazIntfImage(intf) then | |||
| raise EglBitmap.Create('unable to create LazIntfImage from glBitmap'); | |||
| png.LoadFromIntfImage(intf); | |||
| png.SaveToStream(aStream); | |||
| finally | |||
| png.Free; | |||
| intf.Free; | |||
| end; | |||
| end; | |||
| {$ELSEIF DEFINED(GLB_LIB_PNG)} | |||
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TglBitmap.SavePNG(const aStream: TStream); | |||
| var | |||
| @@ -6156,7 +6274,42 @@ end; | |||
| {$ENDIF} | |||
| {$IFDEF GLB_SUPPORT_JPEG_READ} | |||
| {$IF DEFINED(GLB_SDL_IMAGE)} | |||
| {$IF DEFINED(GLB_LAZ_JPEG)} | |||
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| function TglBitmap.LoadJPEG(const aStream: TStream): Boolean; | |||
| var | |||
| jpeg: TJPEGImage; | |||
| intf: TLazIntfImage; | |||
| StreamPos: Int64; | |||
| begin | |||
| result := true; | |||
| StreamPos := aStream.Position; | |||
| jpeg := TJPEGImage.Create; | |||
| try try | |||
| jpeg.LoadFromStream(aStream); | |||
| intf := TLazIntfImage.Create(0, 0); | |||
| try try | |||
| intf.LoadFromBitmap(jpeg.BitmapHandle, jpeg.MaskHandle); | |||
| AssignFromLazIntfImage(intf); | |||
| except | |||
| result := false; | |||
| aStream.Position := StreamPos; | |||
| exit; | |||
| end; | |||
| finally | |||
| intf.Free; | |||
| end; | |||
| except | |||
| result := false; | |||
| aStream.Position := StreamPos; | |||
| exit; | |||
| end; | |||
| finally | |||
| jpeg.Free; | |||
| end; | |||
| end; | |||
| {$ELSEIF DEFINED(GLB_SDL_IMAGE)} | |||
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| function TglBitmap.LoadJPEG(const aStream: TStream): Boolean; | |||
| var | |||
| @@ -6334,7 +6487,27 @@ end; | |||
| {$ENDIF} | |||
| {$IFDEF GLB_SUPPORT_JPEG_WRITE} | |||
| {$IF DEFINED(GLB_LIB_JPEG)} | |||
| {$IF DEFINED(GLB_LAZ_JPEG)} | |||
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TglBitmap.SaveJPEG(const aStream: TStream); | |||
| var | |||
| jpeg: TJPEGImage; | |||
| intf: TLazIntfImage; | |||
| begin | |||
| jpeg := TJPEGImage.Create; | |||
| intf := TLazIntfImage.Create(0, 0); | |||
| try | |||
| if not AssignToLazIntfImage(intf) then | |||
| raise EglBitmap.Create('unable to create LazIntfImage from glBitmap'); | |||
| jpeg.LoadFromIntfImage(intf); | |||
| jpeg.SaveToStream(aStream); | |||
| finally | |||
| intf.Free; | |||
| jpeg.Free; | |||
| end; | |||
| end; | |||
| {$ELSEIF DEFINED(GLB_LIB_JPEG)} | |||
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TglBitmap.SaveJPEG(const aStream: TStream); | |||
| var | |||