[gdal-dev] Can GDALCreate be Used for PNG?

Nik Sands nixanz at nixanz.com
Wed Jul 17 16:06:40 PDT 2013


Thanks Frank.

So I think I need to do something like the code below instead, ie, create a "MEM" dataset and later create-copy to a "PNG" dataset.  This seems to be working (although the content of the image is all wrong - but that's another issue for me to try to figure out).

Thanks again,
Nik.


GDALDatasetH memDS = GDALCreate( GDALGetDriverByName("MEM"), "tmp", 256, 256, 4, GDT_Float32, NULL );

…
…
…

char **options = NULL;

options = CSLSetNameValue( papszOptions, "WORLDFILE", "NO" );
options = CSLSetNameValue( papszOptions, "ZLEVEL", "9" );

GDALDatasetH dstDS = GDALCreate( hDriver, "/var/tmp/image.png", 256, 256, 4, GDT_Float32, options );
	GDALDatasetH dstDS = GDALCreateCopy( GDALGetDriverByName("PNG"), "/var/tmp/image.png", memDS, FALSE, options, NULL, NULL );


On 17/07/2013, at 4:50 PM, Frank Warmerdam <warmerdam at pobox.com> wrote:

> Nik,
> 
> No, the PNG format does not support direct creation, only creation by copying an existing dataset (GDALCreateCopy()).  You can interactively see the capabilities of a driver like this:
> 
> gdalinfo --format png
> Format Details:
>   Short Name: PNG
>   Long Name: Portable Network Graphics
>   Extension: png
>   Mime Type: image/png
>   Help Topic: frmt_various.html#PNG
>   Supports: CreateCopy() - Create dataset by copying another.
>   Supports: Virtual IO - eg. /vsimem/
>   Creation Datatypes: Byte UInt16
> 
> <CreationOptionList>
>   <Option name="WORLDFILE" type="boolean" description="Create world file" />
>   <Option name="ZLEVEL" type="int" description="DEFLATE compression level 1-9" default="6" />
> </CreationOptionList>
> 
> The "Supports: CreateCopy()" means you can create the format, but only by copying an existing dataset.  Formats supporting creation will have "Supports: Create()".  You can get a broad listing of all formats like this:
> 
> gdalinfo --formats
> ....
>   SDTS (rov): SDTS Raster
>   DTED (rwv): DTED Elevation Raster
>   PNG (rwv): Portable Network Graphics
>   JPEG (rwv): JPEG JFIF
>   MEM (rw+): In Memory Raster
> ...
> 
> The "w" means it supports at least CreateCopy(). The "+" means it supports create+update.  
> 
> Best regards,
> 
> 
> 
> On Tue, Jul 16, 2013 at 10:14 PM, Nik Sands <nixanz at nixanz.com> wrote:
> Can I use GDALCreate to create (and later write to) PNG images?
> If so, is "PNG" the correct string for GDALGetDriverByName?
> 
> Otherwise, can somebody please let me know why the code below returns NULL from GDALCreate (assigned to dstDS)?
> 
> Advice much appreciated, as always.
> 
> Thanks,
> Nik.
> 
> 
> 
>         GDALDriverH hDriver = GDALGetDriverByName("PNG");
>         char **papszOptions = NULL;
> 
>         papszOptions = CSLSetNameValue( papszOptions, "WORLDFILE", "NO" );
>         papszOptions = CSLSetNameValue( papszOptions, "ZLEVEL", "9" );
> 
>         GDALDatasetH dstDS = GDALCreate( hDriver, "/var/tmp/image.png", 256, 256, 4, GDT_Float32, papszOptions );
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/gdal-dev
> 
> 
> 
> -- 
> ---------------------------------------+--------------------------------------
> I set the clouds in motion - turn up   | Frank Warmerdam, warmerdam at pobox.com
> light and sound - activate the windows | http://pobox.com/~warmerdam
> and watch the world go round - Rush    | Geospatial Software Developer

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20130718/778be6b7/attachment.html>


More information about the gdal-dev mailing list