summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 2000c40)
raw | patch | inline | side by side (parent: 2000c40)
author | Jon A. Cruz <jon@joncruz.org> | |
Fri, 6 Aug 2010 08:16:47 +0000 (01:16 -0700) | ||
committer | Jon A. Cruz <jon@joncruz.org> | |
Fri, 6 Aug 2010 08:16:47 +0000 (01:16 -0700) |
src/trace/quantize.cpp | patch | blob | history |
diff --git a/src/trace/quantize.cpp b/src/trace/quantize.cpp
index 8acfe0c3473b48fcf7ca82138c9bc49b01a80196..2db1bbf34dfc66d088f791624787b46147469b98 100644 (file)
--- a/src/trace/quantize.cpp
+++ b/src/trace/quantize.cpp
assert(rgbmap);
assert(ncolor > 0);
+ IndexedMap *newmap = 0;
+
pool<Ocnode> pool;
- Ocnode *tree;
+ Ocnode *tree = 0;
try {
- tree = octreeBuild(&pool, rgbmap, ncolor);
+ tree = octreeBuild(&pool, rgbmap, ncolor);
}
- catch (std::bad_alloc& ex) {
- return NULL; //should do smthg else?
+ catch (std::bad_alloc &ex) {
+ //should do smthg else?
}
- RGB *rgbpal = new RGB[ncolor];
- int indexes = 0;
- octreeIndex(tree, rgbpal, &indexes);
-
- octreeDelete(&pool, tree);
+ if ( tree ) {
+ RGB *rgbpal = new RGB[ncolor];
+ int indexes = 0;
+ octreeIndex(tree, rgbpal, &indexes);
- // stacking with increasing contrasts
- qsort((void *)rgbpal, indexes, sizeof(RGB), compRGB);
+ octreeDelete(&pool, tree);
- // make the new map
- IndexedMap *newmap = IndexedMapCreate(rgbmap->width, rgbmap->height);
- if (!newmap) { delete rgbpal; return NULL; }
+ // stacking with increasing contrasts
+ qsort((void *)rgbpal, indexes, sizeof(RGB), compRGB);
- // fill in the color lookup table
- for (int i = 0; i < indexes; i++) newmap->clut[i] = rgbpal[i];
- newmap->nrColors = indexes;
-
- // fill in new map pixels
- for (int y = 0; y < rgbmap->height; y++)
- {
- for (int x = 0; x < rgbmap->width; x++)
- {
- RGB rgb = rgbmap->getPixel(rgbmap, x, y);
- int index = findRGB(rgbpal, ncolor, rgb);
- newmap->setPixel(newmap, x, y, index);
+ // make the new map
+ newmap = IndexedMapCreate(rgbmap->width, rgbmap->height);
+ if (newmap) {
+ // fill in the color lookup table
+ for (int i = 0; i < indexes; i++) {
+ newmap->clut[i] = rgbpal[i];
+ }
+ newmap->nrColors = indexes;
+
+ // fill in new map pixels
+ for (int y = 0; y < rgbmap->height; y++) {
+ for (int x = 0; x < rgbmap->width; x++) {
+ RGB rgb = rgbmap->getPixel(rgbmap, x, y);
+ int index = findRGB(rgbpal, ncolor, rgb);
+ newmap->setPixel(newmap, x, y, index);
+ }
}
}
+ delete[] rgbpal;
+ }
- delete rgbpal;
return newmap;
}