SView5   Online for 13 Years



Last changed: 17/November/2012 (17.11.2012)


 REVIEWS: (früher) und (heute) 

 What is the portable SView5 SDK?
  
 - Closed/Shared Source Graphics Toolkit
 - can be used as Link Library (LIB) or Shared Library (DLL / .SO) 
 - C++ wrapper classes based on rocksolid, highly efficient C code
 - highly portable and suitable for embedded usage
 - low memory and CPU requirements
 - originally written in scarce resource environment 
 - free of GNU GPL or similar restrictive 3rd party licenses (x)
 
 It is basically a graphics toolkit, which allows to read and write a large number (over 145
 variants of) file formats and a collection of almost as many graphic filters. The system supports
 1-48 bit color depth (max. 16 bit per channel) and alpha channel (max. 16 bit per channel) for
 LDR integer images. HDR support is available in form of 32 bit float per channel (96 Bit) and
 an optional alpha channel (plus 32 bit, i.e. 128 bit altogether).
 
 The system is very efficient and compact and suits very well e.g. Embedded Systems.

 A typical size of the SView class library under standard Linux/x86 with GCC is around 500K.
 On an Embedded System with efficient C library a fraction of that should be sufficient.

 Targets so far include MS VC++ 10 (previously VC++ 6 resp. VC++ 9) and Cygwin resp. Linux.
 Thus it compiles well under Visual Studio 2008 and 2010 (current project: VC++ 2010).

 The design of the C++ classes is completely platform-independent and endian-aware,
 thus suitable to be ported to a wide range of operating systems, e.g. all Linux
 derivates, Windows, AmigaOS, BeOS/Zeta, VxWorks or QNX. Additionally,  no compiler-specific
 C++ specialities are used ("baseline C++) and utilization from within an otherwise
 pure C program therfore is not an issue.

 GUIs of any kind easily can be wrappted around the C++ classes.
 Currently code-wise there's SView5, also done in MS VC++ 10,
 and a sample display program for X11.

 Should you be(come) interested to license the SDK for use e.g. with
 Linux, QNX or some other OS/RTOS for Embedded System applications,
 please contact me by eMail.
 
 I will gladly make you a reasonable offer for licensing. The exact conditions
 are to be negotiated - since I do not actively operate a business at the time of
 writing, there is unfortunately no way to discuss potential conditions here on this
 website.
 
 Why should you contact me?
 
 -- Because the API approach is simple to use and easy to adapt!
 -- Because portability and OS abstraction is high!
 -- Because the source-code is consistent and well-tested!
 -- Etc.
 
 Why should you do this? -- Because the API approach is simple to use and easy to adapt!
 
 Currently the following C++ classes for loading/saving images are included:

SDK:                         [159]      [66]
    - ARW (S'ny) (+)	      load (1)     
    - BMP (Win + OS/2)        load (5)  save (2)
    - C64 (Koala/Doodle, ...) load (4)
    - C-Source + Assembler              save (4)
    - CDR (C'relDr'w Preview) load (1)
    - CR2 (C'non) (+)	      load (1)    
    - CRW (C'non) (+)	      load (1)      
    - CT (Sc't'x)             load (1)
    - CUT (Dr. H'l')          load (1)     
    - CVP                     load (1)    
    - DDS/DXT (MS DX10)       load (6)  save (1)
    - Degas (PI/PC1-3)        load (6)
    - DNG (Digi Negative)(+)  load (1)
    - EPS (EPSF) (*)          load (2)  save (1)
    - Exif (XMP) (*)          load (1)
    - EXR (Op'nEXR) (*)       load (1)    
    - FBM                     load (1)  save (1)
    - FIG (*)                 load (1)
    - FITS (#)                load (1)    
    - GIF (87a/89a)           load (2)  save (2)
    - HDR (RGBE)              load (1)  save (1)
    - IFF-ACBM                load (1)  save (1)     
    - IFF-DEEP                load (3)  save (1) 
    - IFF-FAXX                load (1)
    - IFF-ILBM                load (2)  save (2)
    - IFF-PBM                 load (2)  save (2)    
    - IFF-RGB8/RGBN           load (2)  save (1)    
    - IFF-RGFX                load (3)  save (3)
    - IFF-YUVN                load (7)  save (1)
    - IMG (HS16/HS18)         load (4)  save (2)
    - JPEG (IJG-JFIF)         load (1)  save (1)
    - JPEG 2000 (JP2,JPC,PGX) load (3)  save (2)
    - KDC (K'dak) (+)	      load (1)    
    - LJPG (JPEG-LS)          load (1)  save (1)
    - MAC (MacP''nt)          load (1)  save (1)
    - MIFF                              save (1)
    - MSP (MSP''nt)           load (1)
    - NEF (N'kon) (+)	      load (1)    
    - NEO (chrome)            load (1)
    - MTV                     load (1)  save (1)    
    - JPEG (IJG-JFIF)         load (1)  save (1)
    - ORF (Ol'mpus) (+)	      load (1)     
    - PAM (P7 GRAY/RGB)       load (2)  save (2)
    - PCX                     load (1)  save (1)
    - PDF (GS) (*)            load (1)     
    - PFM (PF/Pf)             load (2)  save (2)    
    - PCP (P'ctor)            load (2)  save (2)
    - PICT-2 (Mac)            load (1)
    - PNG (PiNG)              load (1)  save (1)    
    - PNM (PBM,PGM,PPM/P1-P6) load (6)  save (2)
    - PhotoCD [TM] (768x512)  load (1)
    - PS (GS) (*)             load (1) 
    - PSD (Ph'toSh'p)         load (1)  save (1)
    - PSB (Ph'toSh'p)         load (1)    
    - PSP (P'intSh'p)         load (3)
    - PXR (P'xar)             load (1)
    - QRT/POV (Raytracer)     load (1)  save (1)
    - QL (QL4/QL8 SCR)        load (2)    
    - RAS (SunRaster)         load (1)  save (1)    
    - RAW                     load (14) save (4)
    - RAW Meta                load (8)  save (4)
    - RW2 (P'nas'nic) (+)     load (1)
    - SCR (ZX Spectrum)       load (2)
    - SGI                     load (1)  save (1)
    - SGX (SView Gfx)         load (3)  save (3)
    - SRF (S'ny) (+)	      load (1)     
    - SVG (W3C/Tiny)          load (1)
    - Targa                   load (1)  save (1)
    - TIFF                    load (15) save (2)
    - TIM (PSX)               load (1)
    - WebP (Weppy)            load (1)  save (1)
    - X3F (v2.x) (+)          load (1)
    - XBM (v11)               load (1)  save (1)
    - XMP (v1-v3)             load (3)  save (3)
    - XWD (V11)               load (1)
    
    (*) requires external tool for full functionality,
        like: Ghostscript, Fig2Dev (WinFIG), DCRAW,
              ExifTool, exrtoppm
    (#) contained in SDK, disabled in SView5
    (+) indirectly via other loader/saver (e.g. TIFF)    
 
 Currently the following C++ classes for image processing are included:

     SDK:                    [64]
    - AddAlpha
    - AddBorder
    - AlphaBlend
    - AlphaTo8Bit
    - AlphaTo16Bit
    - AlphaTo32Bit    
    - Antique
    - AnyTo24Bit
    - AnyTo48Bit
    - AnyTo96Bit    
    - AutoBorder
    - Blur
    - Brightness
    - ColorCycle
    - Complement
    - Contrast
    - Convolve      (3x3) [*]
    - ConvolveFloat (3x3) [*]
    - ConvolveNxN   (nxn) [*] - i.e. 5x5, 7x7, 9x9
    - Crop
    - Cut
    - CutInverse    
    - DigiPaint
    - DitherFix24
    - Dither24Bit
    - ExtractAlpha    
    - ExtractBlue
    - ExtractGrayScales
    - ExtractGreen
    - ExtractRed
    - FlipNibbles
    - Gamma
    - Ghost
    - HilbertDither256
    - Histogram
    - InvertAlpha
    - InvertColors256
    - LeftToRight
    - Median
    - Mirror
    - MirrorCopy
    - Mosaic
    - Negate    
    - OilPaint
    - OptimizeAlpha    
    - OptimizePalette
    - PaletteDither
    - Paste
    - PasteAlpha    
    - RedEyeFix
    - ReplaceBorder
    - ResetChannel
    - Resize
    - ResizeDDA
    - Rotate
    - RotateFree    
    - Scale50
    - Scatter
    - Sharpen
    - Slicing
    - StripAlpha
    - Tiling
    - TopToBottom
    - XOr
    
[*]
    plus 67 pre-defined 3x3 convolution matrix filters
    plus 21 pre-defined NxN convolution matrix filters
    plus 10 pre-defined 3x3 float convolution matrices
 
 More modules will be made available over the time or on demand.

 The SView C++ classes are free of GNU-alike restrictive 3rd party licenses.

   (x) - png is based on libpng/zlib
       - jfif is based on libjpeg
       - jpeg2000 is based on libjasper
       - tiff is based on libtiff/libjpeg/zlib and custom code,
         i.e. JPEG and ZLib compression and more are supported.
         For LZW no longer an Unisys license is required
       - for GIF no longer an Unisys license is required
       - PCX, BMP and Targa are far more advanced than usual "mainstream" filters,
         same is true for some of the other file formats
       - libexif/iptc are used (LGPL code), but clearly separated
       - color management is based on lcms, i.e. LittleCMS 2.x (using ICC profiles)
         and accesses the ICCP chunks/tags in PNG, JPEG, TIFF, etc.   
       - weppy (webp) is based on libwebp/libvpx
 
How does it work on source code level? When necessary you get a pointer to a linear buffer in memory providing direct access to 8 Bit respectively 24 Bit (8:8:8) pixel data for further processing. A separate 8 bit alpha channel buffer is provided optionally in addition. 48/96 bit with alpha is handled the same way. This data easily can be converted e.g. into an X11 ZPixmap or a Windows .NET Bitmap. Example Code:
int main(int argc, char **argv) // [conv.exe] [source.gif] [dest.bmp] { // file type recognition works automatically as well, but is not shown // in this example... svoGIF gifr; // one Object for reading a GIF svoBMP bmpw; // one Object for writing a BMP ULONG retval; retval = CheckLoadSave( (SVObject *) &gifr, (SVObject *) &bmpw, argv[1], argv[2]); if(retval) printf("\nError: \42%s\42 !", SVL_GetErrorString(errorcode)); return(0); } void MyProgress(struct SVProgress *pr, APTR progressdata) { printf("\rPercent: %3ld", pr->svpr_Percent); } ULONG CheckLoadSave(class SVObject *objr, class SVObject *objw, char *readname, char *writename) { struct SV_GfxBuffer *gfxb = NULL; // contains 8 bit and 24 bit data uncompressed ULONG retval = SVERR_NO_ERROR; printf("\nLoading %s...\n", readname); objr->SetProgressFunc(&MyProgress, NULL); retval = objr->SetReadName((UBYTE *) readname); if(!retval) { retval = objr->ReadToGfxBuffer(); if(!retval) { retval = objr->GetGfxBuffer(&gfxb); if(!retval) { if(gfxb) { printf("\nSaving %s...\n", writename); objw->SetProgressFunc(&MyProgress, NULL); retval = objw->SetWriteName((UBYTE *) writename); if(!retval) { retval = objw->SetGfxBuffer(gfxb); if(!retval) { retval = objw->WriteGfxBuffer(); } } } } } } return(retval); }

Created and (C) 1999-2012 by Dipl.-Ing. Andreas R. Kleinert VDI.
Impressum/Datenschutz (deutsch) - Imprint (english) & PGP-Key
- All mentioned trademarks are subject to their owners -
Get Firefox! Get Thunderbird!