[OpenJDK 2D-Dev] [11] RFR JDK-7031957: DIB header of type BITMAPV2INFOHEADER & BITMAPV3INFOHEADER is not supported in BMPImageReader
Phil Race
philip.race at ORACLE.COM
Tue Mar 20 16:27:04 UTC 2018
In that case the patch is fine.
-phil.
On 03/20/2018 12:15 AM, Jayathirth D V wrote:
>
> HI Phil,
>
> Please find my observation:
>
> In case of DIB header type BITMAPINFOHEADER/ BITMAPV4HEADER/
> BITMAPV5HEADER, Microsoft
> documentation(https://msdn.microsoft.com/en-us/library/dd183376(v=vs.85).aspx
> <https://msdn.microsoft.com/en-us/library/dd183376%28v=vs.85%29.aspx>
> ) mentions that mask values are valid only when compression type is
> BI_BITFIELDS. When compression type is BI_RGB which ii no compression,
> Microsoft document mentions that
>
> 1)For 16 bpp : “The relative intensities of red, green, and blue are
> represented with five bits for each color component. The value for
> blue is in the least significant five bits, followed by five bits each
> for green and red. The most significant bit is not used.”. So
> basically it should be RGB555.
>
> 2)For 32 bpp : “Each DWORD in the bitmap array represents the relative
> intensities of blue, green, and red for a pixel. The value for blue is
> in the least significant 8 bits, followed by 8 bits each for green and
> red. The high byte in each DWORD is not used”. So basically it should
> be XRGB8888.
>
> This is why we have redMask = 0x7C00, greenMask = 0x3E0, blueMask =
> 0x1F in case of 16bpp and redMask = 0x00FF0000, greenMask =
> 0x0000FF00, blueMask = 0x000000FFfor 32bpp for all the three standard
> formats BITMAPINFOHEADER, BITMAPV4HEADER and BITMAPV5HEADER.
>
> Since BITMAPV2INFOHEADER & BITMAPV3INFOHEADER support falls in between
> that of other Microsoft documented DIB header types it is good that we
> follow the same approach in case of BITMAPV2INFOHEADER &
> BITMAPV3INFOHEADER also.
>
> Please let us know your inputs.
>
> Thanks,
>
> Jay
>
> *From:*Phil Race
> *Sent:* Monday, March 19, 2018 11:07 PM
> *To:* Jayathirth D V; 2d-dev
> *Subject:* Re: [OpenJDK 2D-Dev] [11] RFR JDK-7031957: DIB header of
> type BITMAPV2INFOHEADER & BITMAPV3INFOHEADER is not supported in
> BMPImageReader
>
> Since the principal addition of these formats is to add explicit fields
> for supporting the bitmasks for accessing R/G/B/A it seems odd to
> see there is code like this which ignores it when the data is uncompressed
> by using these hardcoded values :
>
> 456 if ((int)compression == BI_RGB) {
> 457 redMask = 0x7C00;
> 458 greenMask = 0x3E0;
> 459 blueMask = 0x1F;
>
>
> I do see that it seems likely you copied this from the 108/124 case
> but I'd like to see some proof that this is correct.
>
>
> -phil.
>
> On 03/14/2018 03:39 AM, Jayathirth D V wrote:
>
> Hello All,
>
> Please review the following solution in JDK11 :
>
> Bug : https://bugs.openjdk.java.net/browse/JDK-7031957
>
> Webrev : http://cr.openjdk.java.net/~jdv/7031957/webrev.00/
> <http://cr.openjdk.java.net/%7Ejdv/7031957/webrev.00/>
>
> _Issue:_ If we try to read any BMP image of DIB header type
> BITMAPV2INFOHEADER/ BITMAPV3INFOHEADER, we get IOException
> mentioning the BMP image type in not yet implemented.
>
> _Root cause: _ BMPImageReader doesn’t support DIB header types
> BITMAPV2INFOHEADER/ BITMAPV3INFOHEADER we support only
> BITMAPCOREHEADER, BITMAPINFOHEADER, BITMAPV4HEADER & BITMAPV5HEADER.
>
> _Solution:_ Many other tools like GIMP, Microsoft PowerPoint,
> IrfanView support BITMAPV2INFOHEADER & BITMAPV3INFOHEADER format
> BMP images. We can consider BITMAPV2INFOHEADER &
> BITMAPV3INFOHEADER header types having functionality in between
> that of BITMAPINFOHEADER & BITMAPV4HEADER. BITMAPINFOHEADER with
> type BITFIELDS & extra 4 bytes for alpha channel or First 56 bytes
> of BITMAPV4HEADER is nothing but BITMAPV3INFOHEADER.
>
> To support BITMAPV2INFOHEADER & BITMAPV3INFOHEADER we can use
> similar approach of what we are doing while decoding first 56
> bytes under BITMAPV4HEADER. So I have added additional “if()” to
> do the same, we can merge decoding of BITMAPV2INFOHEADER &
> BITMAPV3INFOHEADER at the same place where we are decoding
> BITMAPV4HEADER but we need to add many branch conditions to follow
> that approach.
>
> Thanks,
>
> Jay
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20180320/fffb46d6/attachment.html>
More information about the 2d-dev
mailing list