SView5   Online seit 11 Jahren



Letzte Änderung: 06. Juni 2010 (06.06.2010)


 Was ist das portable SView5 SDK?
 
 - Closed/SharedSource Grafiktoolkit
 - C++ Wrapper-Klassen basierend auf robustem, hocheffizientem C-Code
 - hochportabel
 - geringer CPU- und Speicherbedarf
 - ursprünglich in einer Umgebung mit knappen Ressourcen entwickelt
 - frei von GNU GPL oder ähnlich restriktiven Drittlizenzen (x)

 Es handelt sich um ein Grafiktoolkit, mit dem eine große Anzahl Dateiformate
 (über 130 Varianten) gelesen und geschrieben werden können, und eine fast ebenso 
 umfangreiche Sammlung von Grafikfiltern. Das System unterstützt 1-48 Bit Farbtiefe
 (max. 16 Bit pro Kanal) und Alphakanal (max. 16 Bit pro Kanal). HDR-Support ist vorhanden.
 
 Das System ist sehr kompakt und optimiert und ideal z.B. für Embedded Systems geeignet.

 Eine typische Grösse für die SView class library unter Standard-Linux/x86 mit GCC ist ca. 500K.
 Auf einem Embedded-System mit effizienter C-Library sollte ein Bruchteil davon ausreichen.
 
 Targets des C++ Frameworks sind bislang MS VC++ 9 (zuvor VC++ 6) und Cygwin bzw. Linux.
 
 Das Design der C++ Klassen ist jedoch komplett plattform-unabhängig und endian-transparent,
 und daher geeignet, auf eine breite Anzahl von Plattformen portiert zu werden, z.B. alle Linux-Derivate,
 Windows, AmigaOS, BeOS/Zeta, VxWorks oder QNX. Desweiteren werden keine compiler-spezifischen
 C++ Besonderheiten verwendet ("baseline C++") und eine Nutzung aus einem ansonsten reinen C-Programm
 ist dementsprechend unproblematisch.

 GUIs jeder Art können leicht um die C++ Klassen herumgebaut werden.
 Derzeit existiert code-seitig SView5, ebenfalls in MS VC++ 9 erstellt,
 und ein Beispiel-Anzeigeprogramm für X11.

 Sollten Sie Interesse haben, das SDK z.B. für die Verwendung mit Linux, QNX oder
 einem anderen OS/RTOS für ein Embedded System zu lizensieren, sprechen Sie mich
 bitte per eMail an.
 
 Ich mache Ihnen gerne ein günstiges Lizensierungsangebot. Die konkreten Bedingungen
 wären auszuhandeln - da ich zum Zeitpunkt der Erstellung dieses Textes kein aktives
 Gewerbe betreibe, ist es leider nicht möglich, etwaige Konditionen auf dieser Website
 zur Diskussion zu stellen.

 Warum sollten Sie mich kontaktieren?
 
 -- Weil der API-Ansatz einfach zu nutzen und leicht adaptierbar ist!
 -- Weil die Portabilität und OS-Abstraktion hoch ist!
 -- Weil der Quellcode in sich konsistent und gut getestet ist!
 -- Etc.

 Derzeit sind die folgenden C++ Klassen zum Laden/Speichern von Bildern fertiggestellt:

   SDK:                         [147]      [65]
    - 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)
    - 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 (et al) (*)         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)
    - LJPG (JPEG-LS)          load (1)  save (1)
    - MAC (MacP''nt)          load (1)  save (1)
    - MIFF                              save (1)
    - MSP (MSP''nt)           load (1)
    - NEO (chrome)            load (1)
    - MTV                     load (1)  save (1)    
    - JPEG (IJG-JFIF)         load (1)  save (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)
    - 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)
    - SCR (ZX Spectrum)       load (2)
    - SGI                     load (1)  save (1)
    - SGX (SView Gfx)         load (3)  save (3)
    - Targa                   load (1)  save (1)
    - TIFF                    load (15) save (2)
    - TIM (PSX)               load (1)
    - XBM (v11)               load (1)  save (1)
    - XMP (v1-v3)             load (3)  save (3)
    - XWD (V11)               load (1)
    
    (*) setzt externes Tool für die volle Funktionalität voraus,
        wie: Ghostscript, Fig2Dev (WinFIG), DCRAW,
             ExifTool, exrtoppm
    (#) enthalten im SDK, deaktiviert in SView5
    
 Derzeit sind die folgenden C++ Klassen zur Bildverarbeitung fertiggestellt:

     SDK:                    [61]
    - AddAlpha
    - AddBorder
    - AlphaBlend
    - AlphaTo8Bit
    - AlphaTo16Bit
    - Antique
    - AnyTo24Bit
    - AnyTo48Bit
    - 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
    - RedEyeFix
    - ReplaceBorder
    - ResetChannel
    - Resize
    - ResizeDDA
    - Rotate
    - RotateFree    
    - Scale50
    - Scatter
    - Sharpen
    - Slicing
    - StripAlpha
    - Tiling
    - TopToBottom
    - XOr
    
    [*]
    plus 67 vordefinierte 3x3 Convolution Matrix-Filter
    plus 21 vordefinierte NxN Convolution Matrix-Filter
    plus 10 vordefinierte 3x3 float Convolution-Matrix-Filter
 
 Weitere Module werden mit der Zeit oder auf Anfrage bereitgestellt.

   (x) - png basiert auf libpng/zlib
       - jfif basiert auf libjpeg
       - jpeg2000 basiert auf libjasper
       - tiff basiert auf libtiff/libjpeg/zlib und custom code,
         d.h. JPEG und ZLib-Kompression u.a. werden unterstützt.
         Für LZW ist inzwischen keine Unisys-Lizenz mehr erforderlich
       - für GIF ist inzwischen keine Unisys-Lizenz mehr erforderlich
       - PCX, BMP und Targa sind weiter entwickelt als herkömmliche "Mainstream"-Filter,
         gleiches gilt für einige der anderen Formate
       - libexif/iptc werden verwendet (LGPL-Code), sind jedoch eindeutig separiert
       - Colormanagement basiert auf lcms, d.h. LittleCMS 2.x (unter Verwendung von ICC Profilen),
         und greift auf die ICCP Chunks/Tags in PNG, JPEG, TIFF, etc. zu       

Wie sieht das im Source-Code aus? Sie erhalten auf Wunsch einen Zeiger auf einen linearen Puffer im Hauptspeicher, der direkt 8 Bit bzw. 24 Bit (8:8:8) Pixeldaten für die weitere Verarbeitung bereitstellt. Ein separater 8 bit Alpha Channel steht optional zur Verfügung. Diese Daten lassen sich einfach in z.B. eine X11 ZPixmap oder eine Windows .NET Bitmap konvertieren. Beispielcode:
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-2010 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!