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 -
