Hello,

__magick_read__() reads 12-bit (and higher up to 16-bit) gray png images
when using imagemagick-6.3.8.

However it does not work with imagemagick-6.4.0.

The problem is in this section:

        unsigned int depth = imvec[0].modulusDepth();
        i = 0;
        while(depth >>= 1) i++;
        depth = 1 << i;

        switch(depth) {
            case 1:
                output = read_images<boolNDArray>(imvec, frameidx,
depth);
            break;
            case 2:
            case 4:
            case 8:
                output = read_images<uint8NDArray>(imvec, frameidx,
depth);          
            break;
            case 16:
                output = read_images<uint16NDArray>(imvec, frameidx,
depth);         
            break;
            case 32:
            case 64:
            default:
                error("Image depths bigger than 16-bit not supported");
        }

In version 6.3.8, imagemagick returns a depth = 16 for a 12-bit gray
image. Now with version 6.4.0 it returns depth = 13 or some other value
up to 16. Therefore with the new version a depth = 13 will get into the
case 8: by virtue of the while loop above, and will drop valuable
information.

Here is a fix that works for the gray images I have experimented with;
don't know the impact on color images.

        unsigned int depth = imvec[0].modulusDepth();

        switch(depth) {
            case 1:
                output = read_images<boolNDArray>(imvec, frameidx,
depth);
            break;
            case 2:
            case 3: 
            case 4:
            case 5: 
            case 6: 
            case 7: 
            case 8:
                depth = 8;
                output = read_images<uint8NDArray>(imvec, frameidx,
depth);
            break;
            case 9: 
            case 10: 
            case 11: 
            case 12: 
            case 13: 
            case 14: 
            case 15: 
            case 16:
                depth = 16; 
                output = read_images<uint16NDArray>(imvec, frameidx,
depth);
            break;
            case 32:
            case 64:
            default:
                error("Image depths bigger than 16-bit not supported");
        }


--
Valmor

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Octave-dev mailing list
Octave-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/octave-dev

Reply via email to