ImBuf: use more accurate DPI/PPM conversion
Use 0.0254 for conversion as 39.3700787 isn't exactly 1/0.0254 and can't be written as a round float/double.
This commit is contained in:
parent
0439094105
commit
2c463a8250
|
@ -209,7 +209,7 @@ typedef struct ImBuf {
|
|||
*/
|
||||
float *rect_float;
|
||||
|
||||
/* resolution - pixels per meter */
|
||||
/** Resolution in pixels per meter. Multiply by `0.0254` for DPI. */
|
||||
double ppm[2];
|
||||
|
||||
/* tiled pixel storage */
|
||||
|
|
|
@ -390,7 +390,8 @@ static void openexr_header_metadata(Header *header, struct ImBuf *ibuf)
|
|||
}
|
||||
|
||||
if (ibuf->ppm[0] > 0.0) {
|
||||
addXDensity(*header, ibuf->ppm[0] / 39.3700787); /* 1 meter = 39.3700787 inches */
|
||||
/* Convert meters to inches. */
|
||||
addXDensity(*header, ibuf->ppm[0] * 0.0254);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1920,7 +1921,8 @@ struct ImBuf *imb_load_openexr(const unsigned char *mem,
|
|||
ibuf->flags |= exr_is_half_float(*file) ? IB_halffloat : 0;
|
||||
|
||||
if (hasXDensity(file->header(0))) {
|
||||
ibuf->ppm[0] = xDensity(file->header(0)) * 39.3700787f;
|
||||
/* Convert inches to meters. */
|
||||
ibuf->ppm[0] = (double)xDensity(file->header(0)) / 0.0254;
|
||||
ibuf->ppm[1] = ibuf->ppm[0] * (double)file->header(0).pixelAspectRatio();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue