[mapserver-dev] Need help chopping Image into tiles using
mapserver C code
Stephen Woodbridge
woodbri at swoodbridge.com
Wed Sep 23 22:30:50 EDT 2009
Resolved.
Daniel pointed out on IRC that I reverse the src and dest arguments in
my call to msImageCopyMerge(). Duh!
Many thanks to Daniel,
-Steve W
Stephen Woodbridge wrote:
> Hi all,
>
> I'm writing some C code using Mapserver to generate an image and then
> chop it into tiles and save the tiles. The basic flow is like:
>
>
> oImg = msDrawMap(map, MS_FALSE);
> ret = msSaveImage(NULL, oImg, szMetaImg); /* save/debug metatile */
>
> for tile rows {
> for tile columns {
>
> oTile = msImageCreateGD(tileWidth, tileHeight, oImg->format,
> NULL, NULL);
> msImageCopyMerge(oImg->img.gd, oTile->img.gd, 0, 0, tileLeft,
> tileTop, tileWidth, tileHeight, 100);
> ret = msSaveImage(NULL, oTile, buf);
> msFreeImage(oTile);
> }
> }
> msFreeImage(oImg);
>
>
> My problem is that the metatile looks great, but all the tiles are
> black. Traning through the mapserver code in msImageCopyMerge() it is
> not using the gdImageCopyMerge() and running through the for loops.
>
> Looping at the tile images in photoshop, it looks like the pixel values
> are getting set to rgb(4,2,4), the background of the oImg, the src
> image, id rgb(128,177,211)
>
> Does anyone have a clue on what I am missing here?
>
> -Steve W
>
> in gdb oTile looks substantially like oImg
>
> Breakpoint 2, main (argc=4, argv=0x7fffffccd268) at precache3ibeta2.c:860
> 860 oTile =
> msImageCreateGD(tileWidth, tileHeight, oImg->format, NULL, NULL);
> (gdb) p oImg
> $1 = (imageObj *) 0x640870
> (gdb) p *oImg
> $2 = {width = 1680, height = 1680, imagepath = 0x63f880 "",
> imageurl = 0x63f970 "", format = 0x60db80, imageextra = 0x1187b00,
> buffer_format = 1, renderer = 0, size = 0, img = {gd = 0x6b4850,
> svg = 0x6b4850, imagemap = 0x6b4850 "", raw_16bit = 0x6b4850,
> raw_float = 0x6b4850, raw_byte = 0x6b4850 ""}}
> (gdb) p *oImg->format
> $3 = {name = 0x60dac0 "agg", mimetype = 0x60db20 "image/png",
> driver = 0x60dbd0 "AGG/PNG", extension = 0x60db00 "png", renderer = 7,
> imagemode = 1, transparent = 0, bands = 1, numformatoptions = 1,
> formatoptions = 0x60dc10, refcount = 3, inmapfile = 1}
> (gdb) n
> 861 if (!oTile) {
> (gdb)
> 865 msImageCopyMerge(oImg->img.gd,
> oTile->img.gd, 0, 0, tileLeft, tileTop, tileWidth, tileHeight, 100);
> (gdb) p *oTile
> $4 = {width = 200, height = 200, imagepath = 0x0, imageurl = 0x0,
> format = 0x60db80, imageextra = 0x0, buffer_format = 0, renderer = 0,
> size = 0, img = {gd = 0x11be030, svg = 0x11be030, imagemap = 0x11be030
> "",
> raw_16bit = 0x11be030, raw_float = 0x11be030, raw_byte = 0x11be030 ""}}
> (gdb) p *oTile->format
> $5 = {name = 0x60dac0 "agg", mimetype = 0x60db20 "image/png",
> driver = 0x60dbd0 "AGG/PNG", extension = 0x60db00 "png", renderer = 7,
> imagemode = 1, transparent = 0, bands = 1, numformatoptions = 1,
> formatoptions = 0x60dc10, refcount = 4, inmapfile = 1}
> (gdb) p *oTile->format->formatoptions
> $6 = 0x60db60 "INTERLACE=false"
>
> _______________________________________________
> mapserver-dev mailing list
> mapserver-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-dev
More information about the mapserver-dev
mailing list