Search code examples
javaimagegraphicsresolutionbmp

How do I re-set a BMP file's resolution (DPI) indicator?


I have a BMP tagged as 299 DPI resolution. I'd like to change that to 99 DPI.

Importantly, the DPI marker in a BMP has no structural meaning. An image has a certain width and height in pixels. The displaying application can show the image at any width in inches.

So, the DPI is just a hint.

However, I am dealing with some third-party software which behaves differently depending on this marker, so I need to re-set it.

I will appreciate suggestions on how to do this programmatically in Java, as well as in GUI graphics tools (e.g. Gimp).


Solution

  • for the Java part, you can use the img4j library. You have an encoder and a decoder for BMP. The InfoHeader class has a iXpixelsPerM and iYpixelsPerM to set the resolution. You chan check the BMP file format here to have more information.

    Moreover, as the library is opensource, you'll be able to check and understand how the code is working and you'll be able to adapt it to fit your needs (if it complies with your licensing model).

    (Happy New Year! :)