From 088332d9918b85f9016e818d8481293d1b6e6d02 Mon Sep 17 00:00:00 2001 From: "peter.horvath" Date: Tue, 22 Oct 2024 12:23:11 +0200 Subject: [PATCH] fix: fix incorrect vertical alignment in text render The y argument in OIIO::ImageBufAlgo::render_text() should represent the top and bottom edge of the text if vertical alignment is set to TextAlignY::Top and TextAlignY::Bottom. However currently the rendered text is off. The current code adjusts y to point to the top of the text box before rendering the text, but it has to be adjusted to point to the baseline of the text. There is a current test case, testing vertical alignment, but the reference image seems wrong and has now been updated. Signed-off-by: peter.horvath --- src/libOpenImageIO/imagebufalgo_draw.cpp | 4 ++-- testsuite/oiiotool-text/ref/aligned.tif | Bin 7594 -> 6513 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libOpenImageIO/imagebufalgo_draw.cpp b/src/libOpenImageIO/imagebufalgo_draw.cpp index 69c0ed57a5..a5619e5e1e 100644 --- a/src/libOpenImageIO/imagebufalgo_draw.cpp +++ b/src/libOpenImageIO/imagebufalgo_draw.cpp @@ -1104,9 +1104,9 @@ ImageBufAlgo::render_text(ImageBuf& R, int x, int y, string_view text, if (alignx == TextAlignX::Center) x -= (textroi.width() / 2 + textroi.xbegin); if (aligny == TextAlignY::Top) - y += textroi.height(); + y -= textroi.ybegin; if (aligny == TextAlignY::Bottom) - y -= textroi.height(); + y -= textroi.yend; if (aligny == TextAlignY::Center) y -= (textroi.height() / 2 + textroi.ybegin); diff --git a/testsuite/oiiotool-text/ref/aligned.tif b/testsuite/oiiotool-text/ref/aligned.tif index 04fdfaff797e2ff0ab4ba490ec02ba623fe7784b..501b57f35146321ac48467771b56ea4a4b94c49e 100644 GIT binary patch delta 4887 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