From f31763fbe7612c8c9eaac6f011b8dacfca7d22dc Mon Sep 17 00:00:00 2001 From: ainyan03 Date: Sun, 8 Feb 2026 08:27:58 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20MatteNode=E8=83=8C=E6=99=AF=E3=82=B3?= =?UTF-8?q?=E3=83=94=E3=83=BC=E3=81=A7ViewPort=E3=81=AEx,y=E3=82=AA?= =?UTF-8?q?=E3=83=95=E3=82=BB=E3=83=83=E3=83=88=E3=81=8C=E6=9C=AA=E9=81=A9?= =?UTF-8?q?=E7=94=A8=E3=81=A0=E3=81=A3=E3=81=9F=E3=83=90=E3=82=B0=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bgが非アフィン状態(ViewPortにx,yオフセットあり)の場合、 先頭行の内容が全ラインに適用される描画不具合を修正。 --- fleximg/CHANGELOG.md | 4 ++++ fleximg/src/fleximg/nodes/matte_node.h | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/fleximg/CHANGELOG.md b/fleximg/CHANGELOG.md index b79dba5..346d666 100644 --- a/fleximg/CHANGELOG.md +++ b/fleximg/CHANGELOG.md @@ -75,6 +75,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - `InputView::from()` が ViewPort の x,y オフセットを無視していたため、`scanMaskZeroRanges` + `cropView` 後のマスクデータアクセス位置がずれていた - `ptr` 設定時に `vp.y * vp.stride + vp.x * vp.bytesPerPixel()` を加算し、ビュー位置をポインタに織り込むよう修正 +- **MatteNode 背景コピーの ViewPort オフセット適用漏れ修正** + - bgの非アフィン状態で先頭行の内容が全ラインに適用されるバグを修正 + - 背景コピーループの行アドレス計算に `bgViewPort.x`, `bgViewPort.y` オフセットを加算 + - **bit-packed format の pixelOffsetInByte サポート** - CompositeNode経由でbit-packed(Index1/2/4)データを処理する際のチャンク境界でのオフセットずれを修正 - `PixelAuxInfo::pixelOffsetInByte` フィールド追加(1バイト内でのピクセル位置 0 - PixelsPerByte-1) diff --git a/fleximg/src/fleximg/nodes/matte_node.h b/fleximg/src/fleximg/nodes/matte_node.h index db9b9cc..8b103d3 100644 --- a/fleximg/src/fleximg/nodes/matte_node.h +++ b/fleximg/src/fleximg/nodes/matte_node.h @@ -465,8 +465,8 @@ RenderResponse& MatteNode::onPullProcess(const RenderRequest& request) { for (auto y = copyStartY; y < copyEndY; ++y) { auto srcY = static_cast(y - bgOffsetY); const uint8_t* srcRow = static_cast(bgViewPort.data) - + srcY * bgViewPort.stride - + srcStartX * srcBytesPerPixel; + + (bgViewPort.y + srcY) * bgViewPort.stride + + (bgViewPort.x + srcStartX) * srcBytesPerPixel; uint8_t* dstRow = static_cast(outView.data) + y * outView.stride + copyStartX * 4;