[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