[Gdal-dev] ReadBlock in C#
Simon Perkins
sy at perkins.net
Tue Mar 27 19:05:06 EDT 2007
Simon Perkins wrote:
> Tamas Szekeres wrote:
>>
>> However I have some doubts why would it be more efficient than calling
>> the ReadRaster/WriteRaster functions in exchange for the additional
>> problems may occur due to the possible errors when passing incorrect
>> parameters.
>> In addition I cannot see how to avoid the extra array copy when
>> marsaling the code between the C and the C# memory. Or would you
>> possibly use the native pointer with the fixed statement inside an
>> unsafe block?
>
> We talked about having an unsafe version of Read/WriteRaster that
> avoided the array copy a while back. Did it make it in there?
Yes, there does seem to be a Band.ReadRaster() that takes an IntPtr to a
buffer. You can either use the fixed statement to get pointer to an
array, which you then pass as an IntPtr, or you can get an IntPtr
directly from structures like Bitmap using the BitmapData methods.
These avoid a copy. Note that if you invoke ReadRaster with buffers that
are the same size as the data block and you're not doing any type
conversion or rescaling, then ReadRaster will pretty much call the
underlying ReadBlock() directly anyway, so there's not really much
reason to expose it.
Cheers,
Sy
More information about the Gdal-dev
mailing list