summaryrefslogtreecommitdiffstats
path: root/src/trace/trace.cpp
diff options
context:
space:
mode:
authorBob Jamison <ishmalius@gmail.com>2006-03-25 05:57:21 +0000
committerishmal <ishmal@users.sourceforge.net>2006-03-25 05:57:21 +0000
commit72c233de4b889debcc509186be8114abbb06f6aa (patch)
tree8dd159b66503e9ae24d4bd9665591d5fae6fb9a8 /src/trace/trace.cpp
parentinitial hookup of siox into Tracer. much work still to be done, and testing too (diff)
downloadinkscape-72c233de4b889debcc509186be8114abbb06f6aa.tar.gz
inkscape-72c233de4b889debcc509186be8114abbb06f6aa.zip
Add PackedPixelMap to make pixbuf->pixel array conversion much cleaner. Also make certain that packed pixels are unsigned long.
(bzr r294)
Diffstat (limited to 'src/trace/trace.cpp')
-rw-r--r--src/trace/trace.cpp39
1 files changed, 9 insertions, 30 deletions
diff --git a/src/trace/trace.cpp b/src/trace/trace.cpp
index b7e83a979..f28b42d2b 100644
--- a/src/trace/trace.cpp
+++ b/src/trace/trace.cpp
@@ -151,45 +151,24 @@ GdkPixbuf *
Tracer::sioxProcessImage(SPImage *img, GdkPixbuf *origPixbuf)
{
- RgbMap *rgbMap = gdkPixbufToRgbMap(origPixbuf);
+ PackedPixelMap *ppMap = gdkPixbufToPackedPixelMap(origPixbuf);
//We need to create two things:
// 1. An array of long pixel values of ARGB
// 2. A matching array of per-pixel float 'confidence' values
- long *imgBuf = new long[rgbMap->width * rgbMap->height];
- float *confidenceMatrix = new float[rgbMap->width * rgbMap->height];
+ unsigned long *imgBuf = ppMap->pixels;
+ float *confidenceMatrix = new float[ppMap->width * ppMap->height];
- long idx = 0;
- for (int j=0 ; j<rgbMap->height ; j++)
- for (int i=0 ; i<rgbMap->width ; i++)
- {
- RGB rgb = rgbMap->getPixel(rgbMap, i, j);
- long pix = (((long)rgb.r) << 16 & 0xFF0000L) |
- (((long)rgb.g) << 8 & 0x00FF00L) |
- (((long)rgb.b) & 0x0000FFL);
- imgBuf[idx++] = pix;
- }
//## ok we have our pixel buf
- org::siox::SioxSegmentator ss(rgbMap->width, rgbMap->height, NULL, 0);
- ss.segmentate(imgBuf, rgbMap->width * rgbMap->height,
- confidenceMatrix, rgbMap->width * rgbMap->height,
+ org::siox::SioxSegmentator ss(ppMap->width, ppMap->height, NULL, 0);
+ ss.segmentate(imgBuf, ppMap->width * ppMap->height,
+ confidenceMatrix, ppMap->width * ppMap->height,
0, 0.0);
- idx = 0;
- for (int j=0 ; j<rgbMap->height ; j++)
- for (int i=0 ; i<rgbMap->width ; i++)
- {
- long pix = imgBuf[idx++];
- RGB rgb;
- rgb.r = (pix>>16) & 0xff;
- rgb.g = (pix>> 8) & 0xff;
- rgb.b = (pix ) & 0xff;
- rgbMap->setPixelRGB(rgbMap, i, j, rgb);
- }
- GdkPixbuf *newPixbuf = rgbMapToGdkPixbuf(rgbMap);
- rgbMap->destroy(rgbMap);
- delete imgBuf;
+
+ GdkPixbuf *newPixbuf = packedPixelMapToGdkPixbuf(ppMap);
+ ppMap->destroy(ppMap);
delete confidenceMatrix;
return newPixbuf;