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;