Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2020-06-11 07:56:09 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-06-11 08:04:11 +0300
commit2c463a82500e4ada715a4a0a8a00c0eb00dceb79 (patch)
tree57d285990259830abc994647f2d4e4d3856811bd /source/blender/imbuf
parent04390941050b1b790cbe812e9a8867cb56c93565 (diff)
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.
Diffstat (limited to 'source/blender/imbuf')
-rw-r--r--source/blender/imbuf/IMB_imbuf_types.h2
-rw-r--r--source/blender/imbuf/intern/openexr/openexr_api.cpp6
2 files changed, 5 insertions, 3 deletions
diff --git a/source/blender/imbuf/IMB_imbuf_types.h b/source/blender/imbuf/IMB_imbuf_types.h
index 4a5f8cc1bfe..ddc8394264a 100644
--- a/source/blender/imbuf/IMB_imbuf_types.h
+++ b/source/blender/imbuf/IMB_imbuf_types.h
@@ -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 */
diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp
index 882808cbc14..0555d213b3f 100644
--- a/source/blender/imbuf/intern/openexr/openexr_api.cpp
+++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp
@@ -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();
}