| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- Strict
- Rem
- bbdoc: Graphics/JPG loader
- about:
- The JPG loader module provides the ability to load JPG format #pixmaps.
- End Rem
- Module BRL.JPGLoader
- ModuleInfo "Version: 1.05"
- ModuleInfo "Author: Simon Armstrong, Jeffrey D. Panici"
- ModuleInfo "License: zlib/libpng"
- ModuleInfo "Copyright: Blitz Research Ltd"
- ModuleInfo "Modserver: BRL"
- ModuleInfo "History: 1.05 Release"
- ModuleInfo "History: Fixed SavePixmapJPeg"
- ModuleInfo "History: 1.04 Release"
- ModuleInfo "History: Removed print"
- ModuleInfo "History: 1.03 Release"
- ModuleInfo "History: Changed ReadBytes to Read for loader"
- ModuleInfo "History: Added SaveJPEG function, thanks to Jeffrey D. Panici for the writefunc `fix'"
- ModuleInfo "History: 1.02 Release"
- ModuleInfo "History: Added support for monochrome / single channel"
- Import BRL.Pixmap
- Import Pub.LibJPEG
- Private
- Function readfunc%( buf:Byte Ptr,count,src:Object )
- Local stream:TStream
- stream=TStream(src)
- Local n=stream.Read( buf,count )
- Return n
- End Function
- Function writefunc%( buf:Byte Ptr,count,src:Object )
- Local stream:TStream
- stream=TStream(src)
- Local n=stream.Write( buf,count )
- Return n
- End Function
- Public
- Rem
- bbdoc: Load a Pixmap in JPeg format
- about:
- #LoadPixmapJPeg loads a pixmap from @url in JPeg format.
- If the pixmap cannot be loaded, Null is returned.
- End Rem
- Function LoadPixmapJPeg:TPixmap( url:Object )
- Local jpg,width,height,depth,y
- Local pix:Byte Ptr
- Local pixmap:TPixmap
- Local stream:TStream
-
- stream=ReadStream( url )
- If Not stream Return
-
- Local res=loadjpg(stream,readfunc,width,height,depth,pix)
- stream.Close
- If res Return Null
-
- If width=0 Return
- Select depth
- Case 1
- pixmap=CreatePixmap( width,height,PF_I8 )
- For y=0 Until height
- CopyPixels pix+y*width,pixmap.PixelPtr(0,y),PF_I8,width
- Next
- Case 3
- pixmap=CreatePixmap( width,height,PF_RGB888 )
- For y=0 Until height
- CopyPixels pix+y*width*3,pixmap.PixelPtr(0,y),PF_RGB888,width
- Next
- End Select
- free_ pix
- Return pixmap
- End Function
- Rem
- bbdoc: Save a Pixmap in JPeg format
- about:
- Saves @pixmap to @url in JPeg format. If successful, #SavePixmapJPeg returns
- True, otherwise False.
- The optional @quality parameter should be in the range 0 to 100, where
- 0 indicates poor quality (smallest) and 100 indicates best quality (largest).
- End Rem
- Function SavePixmapJPeg( pixmap:TPixmap,url:Object,quality=75 )
- Assert quality>=1 And quality<=100
- Local stream:TStream=WriteStream( url )
- If Not stream Return
-
- pixmap=pixmap.convert(PF_RGB888)
- Local pix:Byte Ptr=pixmap.PixelPtr( 0,0 )
- savejpg(stream,writefunc,pixmap.width,pixmap.height,pixmap.pitch,pix,quality)
- stream.Close
- Return True
- End Function
- Private
- Type TPixmapLoaderJPG Extends TPixmapLoader
- Method LoadPixmap:TPixmap( stream:TStream )
- Return LoadPixmapJPeg( stream )
- End Method
- End Type
- New TPixmapLoaderJPG
|