|
|
Zoltan Phelps wrote:
>>
>> On 16 Mar 2008, at 22:31, Zoltan Phelps wrote:
>>
>> > I searched the forum but didn't find any suitable thread.
>> > In my application i would like to show two images, one "original"
>> > version and one "altered" version (e.g. after LUT conversion).
>> > My question is - how can i access the pixel data of an Fl_RGB_Image
>> > directly? The source code reveals only the "const char * const *data
>> > ();" member function but as it is constant i'm not able to change
>> > anything. Is there another suitable way? Or is it better to just
>> > keep an unsigned char array with the pixel data, change it as
>> > desired and redraw it with the fl_draw_image function without
>> > creating any Fl_()_Image object? I'm a bit confused because with
>> > different libraries i used to create an image object and to alter
>> > its pixel data there had always been an access member function.
>> > Thanks in advance!
>>
>> http://www.fltk.org/articles.php?L466
>>
>> http://www.fltk.org/articles.php?L468
>>
>>
>>
>
> Hey, these two links are a great help! Thanks a lot, that was what i've
> been looking for.
Just a tip. Fl_Image::data() returns an _array_ of image buffers. I've
forgotten this a few times and spent far too long in a debugger trying to
figure out why I was getting segfaults.
For example,
Fl_Shared_Image *img = Fl_Shared_Image::get("somepic.png");
const char *img_data = img->data();
That is wrong if you try to access the pixel values in img_data. Doing so
will eventually segfault.
The correct way is:
const char *img_data = img->data()[0];
Another tip, after manipulating img_data, use Fl_Image::uncache() before
calling redraw() on the widget. Again, I spent far too long in a debugger
when my changes to img_data were not being displayed. I think this applies
only if you display img before you manipulate the pixels though.
--
Alvin
[ Direct Link to Message ] | |
|
| |