$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: [boost] Fwd: Formal Review of IO and Toolbox extensions to Boost.GIL starts TOMORROW
From: Christian Henning (chhenning_at_[hidden])
Date: 2010-12-09 14:51:40
Hi Zach,
>
>>> There are some specific problems with the tests, though. For
>>> instance, png_read_test.cpp takes an image file, reads it, then writes
>>> it to a temporary file, then re-reads it from the temp file, and
>>> compares the two read-in images for equality. This strikes me as a
>>> bad test. It is quite possible to read an image, get the wrong
>>> results, then write those wrong results to disk, re-read them, and
>>> then have the re-read results compare equal to the original read
>>> results. There may be other tests with a similar organization; I did
>>> not check.
>>
>> This would assume that both png reader and writer have some bugs in
>> common. I consider that less probable.
>
> No.
>
> Consider an image I that is solid red on the left half, and 0% alpha
> on the right half, with a blue PNG background chunk. When loaded, it
> should produce an image that is red on the left half, and blue on the
> right half.
>
> Your PNG reading code ignores the background-color chunk (not a big
> deal, as so does all other png reading code I've ever seen).
I'll add this as an action item to my todo list. Although, with a
lower priority.
>
> This means that when you read I, you get an image that is red on the
> left, and transparent on the right. If you write that image to disk,
> you have written an image that contains the wrong data (i.e. that is
> different from the source image file). If you re-read it, it will
> compare as equal to the initial read of the original image. You have
> a correct writer, but an incorrect reader, and your test cannot detect
> this.
Yes, I agree not ideal. I have to think about what I can to better.
>
>>>> - Did you try to use the extensions? With what compiler? Did you have any problems?
>>>
>>> I only evaluated the PNG loading code, in an existing library that
>>> already uses (a modified) GIL for image file loading. My library's
>>> modified copy of GIL has numerous fixes to the PNG loading code. When
>>> I substituted gil.io_new, I found that several files were again
>>> unreadable.
>>
>> I just did a quick test with space_elevator.png you mention below.
>> May it be that you forgot to set the BOOST_GIL_IO_ENABLE_GRAY_ALPHA
>> symbol? The following code works just fine:
>>
>> #define BOOST_GIL_IO_ENABLE_GRAY_ALPHA 1
>
> Yes, that was what I was missing. If only I had had the docs built, I
> could have figured that out for myself. All the images in the
> application now load correctly.
>
> What is the rationale for needing to define this? Why can't it be
> always-on, or opt-out, instead of opt-in?
gray_alpha lives in the toolbox and though it's not part of gil, yet.
I'm just covering the case when a user only downloads io_new and not
the toolbox.
This compiler symbol should go away when io_new and toolbox are added to boost.
Would you mind changing your vote? Assuming you changed your opinion.
Regards,
Christian