From a7721d2e51bd4e397cd50b6d51d53e4aa3dd095a Mon Sep 17 00:00:00 2001 From: ainyan03 Date: Sun, 8 Feb 2026 05:57:44 +0900 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20=E9=96=A2=E6=95=B0=E3=83=9D?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=BF=E5=9E=8B=E3=81=AEint=E5=BC=95?= =?UTF-8?q?=E6=95=B0=E3=82=92size=5Ft/int=5Ffast16=5Ft=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ConvertFunc系(pixelCount): int → size_t(バッファサイズの意味合い) - DDA系(count): int → int_fast16_t(ビューポート幅由来の座標寸法) - LineFilterFunc(count): int → int_fast16_t(スキャンライン幅由来) - 対応する実装関数・ローカル変数・ループカウンタも統一 --- fleximg/src/fleximg/image/pixel_format.h | 44 ++++++------ .../src/fleximg/image/pixel_format/alpha8.h | 8 +-- fleximg/src/fleximg/image/pixel_format/dda.h | 70 +++++++++---------- .../image/pixel_format/format_converter.h | 31 ++++---- .../fleximg/image/pixel_format/grayscale8.h | 8 +-- .../src/fleximg/image/pixel_format/index.h | 64 ++++++++--------- .../src/fleximg/image/pixel_format/rgb332.h | 4 +- .../src/fleximg/image/pixel_format/rgb565.h | 12 ++-- .../src/fleximg/image/pixel_format/rgb888.h | 22 +++--- .../image/pixel_format/rgba8_straight.h | 10 +-- fleximg/src/fleximg/image/viewport.h | 22 +++--- fleximg/src/fleximg/operations/filters.h | 26 +++---- 12 files changed, 160 insertions(+), 161 deletions(-) diff --git a/fleximg/src/fleximg/image/pixel_format.h b/fleximg/src/fleximg/image/pixel_format.h index 754968c9..6190401c 100644 --- a/fleximg/src/fleximg/image/pixel_format.h +++ b/fleximg/src/fleximg/image/pixel_format.h @@ -80,7 +80,7 @@ struct DDAParam { using CopyRowDDA_Func = void(*)( uint8_t* dst, const uint8_t* srcData, - int count, + int_fast16_t count, const DDAParam* param ); @@ -92,7 +92,7 @@ using CopyRowDDA_Func = void(*)( using CopyQuadDDA_Func = void(*)( uint8_t* dst, const uint8_t* srcData, - int count, + int_fast16_t count, const DDAParam* param ); @@ -181,10 +181,10 @@ struct PixelFormatDescriptor { // ======================================================================== // 変換関数の型定義 // ======================================================================== - // 統一シグネチャ: void(*)(void* dst, const void* src, int pixelCount, const PixelAuxInfo* aux) + // 統一シグネチャ: void(*)(void* dst, const void* src, size_t pixelCount, const PixelAuxInfo* aux) // Straight形式(RGBA8_Straight)との相互変換 - using ConvertFunc = void(*)(void* dst, const void* src, int pixelCount, const PixelAuxInfo* aux); + using ConvertFunc = void(*)(void* dst, const void* src, size_t pixelCount, const PixelAuxInfo* aux); using ToStraightFunc = ConvertFunc; using FromStraightFunc = ConvertFunc; @@ -251,36 +251,36 @@ namespace detail { // BytesPerPixel別 DDA転写関数(前方宣言) // 実装は dda.h で提供(FLEXIMG_IMPLEMENTATION部) -void copyRowDDA_1Byte(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param); -void copyRowDDA_2Byte(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param); -void copyRowDDA_3Byte(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param); -void copyRowDDA_4Byte(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param); +void copyRowDDA_1Byte(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param); +void copyRowDDA_2Byte(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param); +void copyRowDDA_3Byte(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param); +void copyRowDDA_4Byte(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param); // BytesPerPixel別 DDA 4ピクセル抽出関数(前方宣言) -void copyQuadDDA_1Byte(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param); -void copyQuadDDA_2Byte(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param); -void copyQuadDDA_3Byte(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param); -void copyQuadDDA_4Byte(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param); +void copyQuadDDA_1Byte(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param); +void copyQuadDDA_2Byte(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param); +void copyQuadDDA_3Byte(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param); +void copyQuadDDA_4Byte(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param); // BitsPerPixel別 bit-packed DDA転写関数(前方宣言) // 実装は dda.h で提供(bit_packed_index.h インクルード後) template -void copyRowDDA_Bit(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param); +void copyRowDDA_Bit(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param); template -void copyQuadDDA_Bit(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param); +void copyQuadDDA_Bit(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param); // 8bit LUT → Nbit 変換(4ピクセル単位展開) // T = uint32_t: rgb332_toStraight, index8_expandIndex (bpc==4) 等で共用 // T = uint16_t: index8_expandIndex (bpc==2) 等で共用 template -void lut8toN(T* d, const uint8_t* s, int pixelCount, const T* lut); +void lut8toN(T* d, const uint8_t* s, size_t pixelCount, const T* lut); // 便利エイリアス -inline void lut8to32(uint32_t* d, const uint8_t* s, int pixelCount, const uint32_t* lut) { +inline void lut8to32(uint32_t* d, const uint8_t* s, size_t pixelCount, const uint32_t* lut) { lut8toN(d, s, pixelCount, lut); } -inline void lut8to16(uint16_t* d, const uint8_t* s, int pixelCount, const uint16_t* lut) { +inline void lut8to16(uint16_t* d, const uint8_t* s, size_t pixelCount, const uint16_t* lut) { lut8toN(d, s, pixelCount, lut); } @@ -299,7 +299,7 @@ namespace pixel_format { namespace detail { template -void lut8toN(T* d, const uint8_t* s, int pixelCount, const T* lut) { +void lut8toN(T* d, const uint8_t* s, size_t pixelCount, const T* lut) { while (pixelCount & 3) { auto v0 = s[0]; ++s; @@ -326,8 +326,8 @@ void lut8toN(T* d, const uint8_t* s, int pixelCount, const T* lut) { } // 明示的インスタンス化(非inlineを維持) -template void lut8toN(uint16_t*, const uint8_t*, int, const uint16_t*); -template void lut8toN(uint32_t*, const uint8_t*, int, const uint32_t*); +template void lut8toN(uint16_t*, const uint8_t*, size_t, const uint16_t*); +template void lut8toN(uint32_t*, const uint8_t*, size_t, const uint32_t*); } // namespace detail } // namespace pixel_format @@ -412,7 +412,7 @@ inline const char* getFormatName(PixelFormatID formatID) { struct FormatConverter { // 解決済み変換関数(分岐なし) using ConvertFunc = void(*)(void* dst, const void* src, - int pixelCount, const void* ctx); + size_t pixelCount, const void* ctx); ConvertFunc func = nullptr; // 解決済みコンテキスト(Prepare 時に確定) @@ -447,7 +447,7 @@ struct FormatConverter { } ctx; // 行変換実行(分岐なし) - void operator()(void* dst, const void* src, int pixelCount) const { + void operator()(void* dst, const void* src, size_t pixelCount) const { func(dst, src, pixelCount, &ctx); } diff --git a/fleximg/src/fleximg/image/pixel_format/alpha8.h b/fleximg/src/fleximg/image/pixel_format/alpha8.h index c20f1253..a6d54cec 100644 --- a/fleximg/src/fleximg/image/pixel_format/alpha8.h +++ b/fleximg/src/fleximg/image/pixel_format/alpha8.h @@ -34,11 +34,11 @@ namespace FLEXIMG_NAMESPACE { // ======================================================================== // Alpha8 → RGBA8_Straight(可視化のため全チャンネルにアルファ値を展開) -static void alpha8_toStraight(void* dst, const void* src, int pixelCount, const PixelAuxInfo*) { +static void alpha8_toStraight(void* dst, const void* src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(Alpha8, ToStraight, pixelCount); const uint8_t* s = static_cast(src); uint8_t* d = static_cast(dst); - for (int i = 0; i < pixelCount; ++i) { + for (size_t i = 0; i < pixelCount; ++i) { uint8_t alpha = s[i]; d[i*4 + 0] = alpha; // R d[i*4 + 1] = alpha; // G @@ -48,11 +48,11 @@ static void alpha8_toStraight(void* dst, const void* src, int pixelCount, const } // RGBA8_Straight → Alpha8(Aチャンネルのみ抽出) -static void alpha8_fromStraight(void* dst, const void* src, int pixelCount, const PixelAuxInfo*) { +static void alpha8_fromStraight(void* dst, const void* src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(Alpha8, FromStraight, pixelCount); const uint8_t* s = static_cast(src); uint8_t* d = static_cast(dst); - for (int i = 0; i < pixelCount; ++i) { + for (size_t i = 0; i < pixelCount; ++i) { d[i] = s[i*4 + 3]; // Aチャンネル抽出 } } diff --git a/fleximg/src/fleximg/image/pixel_format/dda.h b/fleximg/src/fleximg/image/pixel_format/dda.h index ec262070..b44aa76b 100644 --- a/fleximg/src/fleximg/image/pixel_format/dda.h +++ b/fleximg/src/fleximg/image/pixel_format/dda.h @@ -55,7 +55,7 @@ template void copyRowDDA_ConstY( uint8_t* __restrict__ dstRow, const uint8_t* __restrict__ srcData, - int count, + int_fast16_t count, const DDAParam* param ) { int_fixed srcX = param->srcX; @@ -92,15 +92,15 @@ void copyRowDDA_ConstY( using T = typename PixelType::type; auto src = reinterpret_cast(srcRowBase); auto dst = reinterpret_cast(dstRow); - int remainder = count & 3; - for (int i = 0; i < remainder; i++) { + int_fast16_t remainder = count & 3; + for (int_fast16_t i = 0; i < remainder; i++) { // BytesPerPixel 1, 2, 4: ネイティブ型でロード・ストア分離 auto p0 = src[srcX >> INT_FIXED_SHIFT]; srcX += incrX; dst[0] = p0; dst += 1; } - int count4 = count >> 2; - for (int i = 0; i < count4; i++) { + int_fast16_t count4 = count >> 2; + for (int_fast16_t i = 0; i < count4; i++) { // BytesPerPixel 1, 2, 4: ネイティブ型でロード・ストア分離 auto p0 = src[srcX >> INT_FIXED_SHIFT]; srcX += incrX; auto p1 = src[srcX >> INT_FIXED_SHIFT]; srcX += incrX; @@ -122,7 +122,7 @@ template void copyRowDDA_ConstX( uint8_t* __restrict__ dstRow, const uint8_t* __restrict__ srcData, - int count, + int_fast16_t count, const DDAParam* param ) { int_fixed srcY = param->srcY; @@ -145,7 +145,7 @@ void copyRowDDA_ConstX( } else { using T = typename PixelType::type; auto dst = reinterpret_cast(dstRow); - int remain = count & 3; + int_fast16_t remain = count & 3; while (remain--) { sy = srcY >> INT_FIXED_SHIFT; auto p = *reinterpret_cast(srcColBase + static_cast(sy * srcStride)); @@ -185,7 +185,7 @@ template void copyRowDDA_Impl( uint8_t* __restrict__ dstRow, const uint8_t* __restrict__ srcData, - int count, + int_fast16_t count, const DDAParam* param ) { int_fixed srcY = param->srcY; @@ -248,7 +248,7 @@ template void copyRowDDA_Byte( uint8_t* dst, const uint8_t* srcData, - int count, + int_fast16_t count, const DDAParam* param ) { const int_fixed srcY = param->srcY; @@ -273,22 +273,22 @@ void copyRowDDA_Byte( } // 明示的インスタンス化(各フォーマットから参照される) -template void copyRowDDA_Byte<1>(uint8_t*, const uint8_t*, int, const DDAParam*); -template void copyRowDDA_Byte<2>(uint8_t*, const uint8_t*, int, const DDAParam*); -template void copyRowDDA_Byte<3>(uint8_t*, const uint8_t*, int, const DDAParam*); -template void copyRowDDA_Byte<4>(uint8_t*, const uint8_t*, int, const DDAParam*); +template void copyRowDDA_Byte<1>(uint8_t*, const uint8_t*, int_fast16_t, const DDAParam*); +template void copyRowDDA_Byte<2>(uint8_t*, const uint8_t*, int_fast16_t, const DDAParam*); +template void copyRowDDA_Byte<3>(uint8_t*, const uint8_t*, int_fast16_t, const DDAParam*); +template void copyRowDDA_Byte<4>(uint8_t*, const uint8_t*, int_fast16_t, const DDAParam*); // BytesPerPixel別の関数ポインタ取得用ラッパー(非テンプレート) -inline void copyRowDDA_1Byte(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param) { +inline void copyRowDDA_1Byte(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param) { copyRowDDA_Byte<1>(dst, srcData, count, param); } -inline void copyRowDDA_2Byte(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param) { +inline void copyRowDDA_2Byte(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param) { copyRowDDA_Byte<2>(dst, srcData, count, param); } -inline void copyRowDDA_3Byte(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param) { +inline void copyRowDDA_3Byte(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param) { copyRowDDA_Byte<3>(dst, srcData, count, param); } -inline void copyRowDDA_4Byte(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param) { +inline void copyRowDDA_4Byte(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param) { copyRowDDA_Byte<4>(dst, srcData, count, param); } @@ -341,7 +341,7 @@ template void copyQuadDDA_Byte( uint8_t* __restrict__ dst, const uint8_t* __restrict__ srcData, - int count, + int_fast16_t count, const DDAParam* param ) { constexpr size_t BPP = BytesPerPixel; @@ -358,7 +358,7 @@ void copyQuadDDA_Byte( uint8_t* edgeFlags = param->edgeFlags; // 全ピクセル境界チェック版(事前範囲チェックなし) - for (int i = 0; i < count; ++i) { + for (int_fast16_t i = 0; i < count; ++i) { int32_t sx = srcX >> INT_FIXED_SHIFT; int32_t sy = srcY >> INT_FIXED_SHIFT; weightsXY[i].fx = static_cast(static_cast(srcX) >> (INT_FIXED_SHIFT - 8)); @@ -450,22 +450,22 @@ void copyQuadDDA_Byte( } } // 明示的インスタンス化 -template void copyQuadDDA_Byte<1>(uint8_t*, const uint8_t*, int, const DDAParam*); -template void copyQuadDDA_Byte<2>(uint8_t*, const uint8_t*, int, const DDAParam*); -template void copyQuadDDA_Byte<3>(uint8_t*, const uint8_t*, int, const DDAParam*); -template void copyQuadDDA_Byte<4>(uint8_t*, const uint8_t*, int, const DDAParam*); +template void copyQuadDDA_Byte<1>(uint8_t*, const uint8_t*, int_fast16_t, const DDAParam*); +template void copyQuadDDA_Byte<2>(uint8_t*, const uint8_t*, int_fast16_t, const DDAParam*); +template void copyQuadDDA_Byte<3>(uint8_t*, const uint8_t*, int_fast16_t, const DDAParam*); +template void copyQuadDDA_Byte<4>(uint8_t*, const uint8_t*, int_fast16_t, const DDAParam*); // BytesPerPixel別の関数ポインタ取得用ラッパー(非テンプレート) -inline void copyQuadDDA_1Byte(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param) { +inline void copyQuadDDA_1Byte(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param) { copyQuadDDA_Byte<1>(dst, srcData, count, param); } -inline void copyQuadDDA_2Byte(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param) { +inline void copyQuadDDA_2Byte(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param) { copyQuadDDA_Byte<2>(dst, srcData, count, param); } -inline void copyQuadDDA_3Byte(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param) { +inline void copyQuadDDA_3Byte(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param) { copyQuadDDA_Byte<3>(dst, srcData, count, param); } -inline void copyQuadDDA_4Byte(uint8_t* dst, const uint8_t* srcData, int count, const DDAParam* param) { +inline void copyQuadDDA_4Byte(uint8_t* dst, const uint8_t* srcData, int_fast16_t count, const DDAParam* param) { copyQuadDDA_Byte<4>(dst, srcData, count, param); } @@ -486,7 +486,7 @@ template void copyRowDDA_Bit_ConstY( uint8_t* __restrict__ dst, const uint8_t* __restrict__ srcData, - int count, + int_fast16_t count, const DDAParam* param ) { constexpr int PixelsPerByte = 8 / BitsPerPixel; @@ -510,16 +510,16 @@ void copyRowDDA_Bit_ConstY( uint8_t pixelOffset = static_cast(minSx % PixelsPerByte); const uint8_t* srcByte = srcRow + (minSx / PixelsPerByte); bit_packed_detail::unpackIndexBits( - stackBuf, srcByte, static_cast(unpackCount), pixelOffset); + stackBuf, srcByte, static_cast(unpackCount), pixelOffset); // DDAサンプリング(unpack済みバイト配列から読み取り) - for (int i = 0; i < count; ++i) { + for (int_fast16_t i = 0; i < count; ++i) { dst[i] = stackBuf[(srcX >> INT_FIXED_SHIFT) - minSx]; srcX += incrX; } } else { // バッファに収まらない場合: per-pixel fallback - for (int i = 0; i < count; ++i) { + for (int_fast16_t i = 0; i < count; ++i) { dst[i] = bit_packed_detail::readPixelDirect( srcData, srcX >> INT_FIXED_SHIFT, sy, param->srcStride); srcX += incrX; @@ -532,7 +532,7 @@ template inline void copyRowDDA_Bit( uint8_t* dst, const uint8_t* srcData, - int count, + int_fast16_t count, const DDAParam* param ) { const int_fixed srcY = param->srcY; @@ -551,7 +551,7 @@ inline void copyRowDDA_Bit( const int_fixed incrX = param->incrX; const int32_t srcStride = param->srcStride; - for (int i = 0; i < count; ++i) { + for (int_fast16_t i = 0; i < count; ++i) { int32_t sx = srcX >> INT_FIXED_SHIFT; int32_t sy = srcY_var >> INT_FIXED_SHIFT; srcX += incrX; @@ -575,7 +575,7 @@ template inline void copyQuadDDA_Bit( uint8_t* dst, const uint8_t* srcData, - int count, + int_fast16_t count, const DDAParam* param ) { // LovyanGFXスタイル: 2x2グリッドを直接読み取り @@ -589,7 +589,7 @@ inline void copyQuadDDA_Bit( BilinearWeightXY* weightsXY = param->weightsXY; uint8_t* edgeFlags = param->edgeFlags; - for (int i = 0; i < count; ++i) { + for (int_fast16_t i = 0; i < count; ++i) { int32_t sx = srcX >> INT_FIXED_SHIFT; int32_t sy = srcY >> INT_FIXED_SHIFT; diff --git a/fleximg/src/fleximg/image/pixel_format/format_converter.h b/fleximg/src/fleximg/image/pixel_format/format_converter.h index 830eafdb..e8ab71d6 100644 --- a/fleximg/src/fleximg/image/pixel_format/format_converter.h +++ b/fleximg/src/fleximg/image/pixel_format/format_converter.h @@ -12,7 +12,7 @@ namespace FLEXIMG_NAMESPACE { // チャンクサイズ(スタック上の中間バッファ用) -static constexpr int FCV_CHUNK_SIZE = 64; +static constexpr size_t FCV_CHUNK_SIZE = 64; // 対応フォーマットの最大バイト/ピクセル(RGBA8 = 4) // 将来RGBA16等を追加する場合は更新が必要 @@ -22,7 +22,7 @@ static constexpr int MAX_BYTES_PER_PIXEL = 4; // カラーキー適用ヘルパー(toStraight後のRGBA8バッファにin-placeで適用) // ======================================================================== -static inline void applyColorKey(uint32_t* rgba8, int pixelCount, +static inline void applyColorKey(uint32_t* rgba8, size_t pixelCount, uint32_t colorKey, uint32_t replace) { if (colorKey == replace) return; while (pixelCount & 3) { @@ -50,17 +50,16 @@ static inline void applyColorKey(uint32_t* rgba8, int pixelCount, // 同一フォーマット: memcpy static void fcv_memcpy(void* dst, const void* src, - int pixelCount, const void* ctx) { + size_t pixelCount, const void* ctx) { auto* c = static_cast(ctx); - size_t units = static_cast( - (pixelCount + c->pixelsPerUnit - 1) / c->pixelsPerUnit); + size_t units = (pixelCount + c->pixelsPerUnit - 1) / c->pixelsPerUnit; std::memcpy(dst, src, units * c->bytesPerUnit); } // 1段階変換: toStraight フィールドに格納された関数を直接呼び出し // (swapEndian, toStraight(dst=RGBA8), fromStraight(src=RGBA8) 共通) static void fcv_single(void* dst, const void* src, - int pixelCount, const void* ctx) { + size_t pixelCount, const void* ctx) { auto* c = static_cast(ctx); c->toStraight(dst, src, pixelCount, nullptr); applyColorKey(static_cast(dst), pixelCount, @@ -69,7 +68,7 @@ static void fcv_single(void* dst, const void* src, // Index展開: パレットフォーマット == 出力フォーマット(直接展開) static void fcv_expandIndex_direct(void* dst, const void* src, - int pixelCount, const void* ctx) { + size_t pixelCount, const void* ctx) { auto* c = static_cast(ctx); PixelAuxInfo aux; aux.palette = c->palette; @@ -82,7 +81,7 @@ static void fcv_expandIndex_direct(void* dst, const void* src, // Index展開 + fromStraight(パレットフォーマット == RGBA8) // チャンク処理でアロケーション不要 static void fcv_expandIndex_fromStraight(void* dst, const void* src, - int pixelCount, const void* ctx) { + size_t pixelCount, const void* ctx) { auto* c = static_cast(ctx); uint8_t straightBuf[FCV_CHUNK_SIZE * MAX_BYTES_PER_PIXEL]; @@ -94,10 +93,10 @@ static void fcv_expandIndex_fromStraight(void* dst, const void* src, auto* dstPtr = static_cast(dst); auto* srcPtr = static_cast(src); - int remaining = pixelCount; + size_t remaining = pixelCount; while (remaining > 0) { - int chunk = (remaining < FCV_CHUNK_SIZE) ? remaining : FCV_CHUNK_SIZE; + size_t chunk = (remaining < FCV_CHUNK_SIZE) ? remaining : FCV_CHUNK_SIZE; c->expandIndex(straightBuf, srcPtr, chunk, &aux); applyColorKey(reinterpret_cast(straightBuf), chunk, c->colorKeyRGBA8, c->colorKeyReplace); @@ -111,7 +110,7 @@ static void fcv_expandIndex_fromStraight(void* dst, const void* src, // Index展開 + toStraight + fromStraight(パレットフォーマット != RGBA8, 一般) // 単一バッファでin-place処理(expandIndex出力を末尾詰めし、toStraightで先頭から上書き) static void fcv_expandIndex_toStraight_fromStraight( - void* dst, const void* src, int pixelCount, const void* ctx) { + void* dst, const void* src, size_t pixelCount, const void* ctx) { auto* c = static_cast(ctx); FLEXIMG_ASSERT(c->paletteBytesPerPixel <= MAX_BYTES_PER_PIXEL, "paletteBytesPerPixel exceeds MAX_BYTES_PER_PIXEL"); @@ -127,13 +126,13 @@ static void fcv_expandIndex_toStraight_fromStraight( auto* dstPtr = static_cast(dst); auto* srcPtr = static_cast(src); - int remaining = pixelCount; + size_t remaining = pixelCount; // 末尾詰めオフセット: toStraightが前から処理する際に上書きが発生しない位置(固定) uint8_t* expandPtr = buf + (MAX_BYTES_PER_PIXEL - c->paletteBytesPerPixel) * FCV_CHUNK_SIZE; while (remaining > 0) { - int chunk = (remaining < FCV_CHUNK_SIZE) ? remaining : FCV_CHUNK_SIZE; + size_t chunk = (remaining < FCV_CHUNK_SIZE) ? remaining : FCV_CHUNK_SIZE; c->expandIndex(expandPtr, srcPtr, chunk, &aux); c->toStraight(buf, expandPtr, chunk, nullptr); applyColorKey(reinterpret_cast(buf), chunk, @@ -148,16 +147,16 @@ static void fcv_expandIndex_toStraight_fromStraight( // 一般: toStraight + fromStraight(RGBA8 経由 2段階変換) // チャンク処理でアロケーション不要 static void fcv_toStraight_fromStraight(void* dst, const void* src, - int pixelCount, const void* ctx) { + size_t pixelCount, const void* ctx) { auto* c = static_cast(ctx); uint8_t straightBuf[FCV_CHUNK_SIZE * MAX_BYTES_PER_PIXEL]; auto* dstPtr = static_cast(dst); auto* srcPtr = static_cast(src); - int remaining = pixelCount; + size_t remaining = pixelCount; while (remaining > 0) { - int chunk = (remaining < FCV_CHUNK_SIZE) ? remaining : FCV_CHUNK_SIZE; + size_t chunk = (remaining < FCV_CHUNK_SIZE) ? remaining : FCV_CHUNK_SIZE; c->toStraight(straightBuf, srcPtr, chunk, nullptr); applyColorKey(reinterpret_cast(straightBuf), chunk, c->colorKeyRGBA8, c->colorKeyReplace); diff --git a/fleximg/src/fleximg/image/pixel_format/grayscale8.h b/fleximg/src/fleximg/image/pixel_format/grayscale8.h index 9df65857..ba175384 100644 --- a/fleximg/src/fleximg/image/pixel_format/grayscale8.h +++ b/fleximg/src/fleximg/image/pixel_format/grayscale8.h @@ -34,11 +34,11 @@ namespace FLEXIMG_NAMESPACE { // ======================================================================== // Grayscale8 → RGBA8_Straight(L → R=G=B=L, A=255) -static void grayscale8_toStraight(void* dst, const void* src, int pixelCount, const PixelAuxInfo*) { +static void grayscale8_toStraight(void* dst, const void* src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(Grayscale8, ToStraight, pixelCount); const uint8_t* s = static_cast(src); uint8_t* d = static_cast(dst); - for (int i = 0; i < pixelCount; ++i) { + for (size_t i = 0; i < pixelCount; ++i) { uint8_t lum = s[i]; d[i*4 + 0] = lum; // R d[i*4 + 1] = lum; // G @@ -48,11 +48,11 @@ static void grayscale8_toStraight(void* dst, const void* src, int pixelCount, co } // RGBA8_Straight → Grayscale8(BT.601 輝度計算) -static void grayscale8_fromStraight(void* dst, const void* src, int pixelCount, const PixelAuxInfo*) { +static void grayscale8_fromStraight(void* dst, const void* src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(Grayscale8, FromStraight, pixelCount); const uint8_t* s = static_cast(src); uint8_t* d = static_cast(dst); - for (int i = 0; i < pixelCount; ++i) { + for (size_t i = 0; i < pixelCount; ++i) { // BT.601: Y = 0.299*R + 0.587*G + 0.114*B // 整数近似: (77*R + 150*G + 29*B + 128) >> 8 uint_fast16_t r = s[i*4 + 0]; diff --git a/fleximg/src/fleximg/image/pixel_format/index.h b/fleximg/src/fleximg/image/pixel_format/index.h index 77999088..ac39ff7e 100644 --- a/fleximg/src/fleximg/image/pixel_format/index.h +++ b/fleximg/src/fleximg/image/pixel_format/index.h @@ -63,23 +63,23 @@ namespace bit_packed_detail { // ======================================================================== template -inline void unpackIndexBits(uint8_t* dst, const uint8_t* src, int pixelCount, uint8_t pixelOffset = 0) { +inline void unpackIndexBits(uint8_t* dst, const uint8_t* src, size_t pixelCount, uint8_t pixelOffset = 0) { constexpr int PixelsPerByte = 8 / BitsPerPixel; constexpr uint8_t Mask = (1 << BitsPerPixel) - 1; // pixelOffsetは1バイト内でのピクセル位置 (0 - PixelsPerByte-1) // 最初のバイトでの開始位置を調整 - int pixelIdx = pixelOffset; - int byteIdx = 0; - int dstIdx = 0; + size_t pixelIdx = pixelOffset; + size_t byteIdx = 0; + size_t dstIdx = 0; while (dstIdx < pixelCount) { uint8_t b = src[byteIdx]; - int remainingInByte = PixelsPerByte - pixelIdx; - int pixelsToRead = (pixelCount - dstIdx < remainingInByte) ? (pixelCount - dstIdx) : remainingInByte; + size_t remainingInByte = static_cast(PixelsPerByte) - pixelIdx; + size_t pixelsToRead = (pixelCount - dstIdx < remainingInByte) ? (pixelCount - dstIdx) : remainingInByte; - for (int j = 0; j < pixelsToRead; ++j) { - int bitPos = pixelIdx + j; + for (size_t j = 0; j < pixelsToRead; ++j) { + size_t bitPos = pixelIdx + j; if constexpr (Order == BitOrder::MSBFirst) { dst[dstIdx++] = (b >> ((PixelsPerByte - 1 - bitPos) * BitsPerPixel)) & Mask; } else { @@ -97,15 +97,15 @@ inline void unpackIndexBits(uint8_t* dst, const uint8_t* src, int pixelCount, ui // ======================================================================== template -inline void packIndexBits(uint8_t* dst, const uint8_t* src, int pixelCount) { - constexpr int PixelsPerByte = 8 / BitsPerPixel; +inline void packIndexBits(uint8_t* dst, const uint8_t* src, size_t pixelCount) { + constexpr size_t PixelsPerByte = 8 / BitsPerPixel; constexpr uint8_t Mask = (1 << BitsPerPixel) - 1; - int bytes = (pixelCount + PixelsPerByte - 1) / PixelsPerByte; - for (int i = 0; i < bytes; ++i) { + size_t bytes = (pixelCount + PixelsPerByte - 1) / PixelsPerByte; + for (size_t i = 0; i < bytes; ++i) { uint8_t b = 0; - int pixels_in_byte = (pixelCount >= PixelsPerByte) ? PixelsPerByte : pixelCount; - for (int j = 0; j < pixels_in_byte; ++j) { + size_t pixels_in_byte = (pixelCount >= PixelsPerByte) ? PixelsPerByte : pixelCount; + for (size_t j = 0; j < pixels_in_byte; ++j) { if constexpr (Order == BitOrder::MSBFirst) { b |= ((src[j] & Mask) << ((PixelsPerByte - 1 - j) * BitsPerPixel)); } else { @@ -157,9 +157,9 @@ inline uint8_t readPixelDirect(const uint8_t* srcData, int32_t x, int32_t y, int // src が dst の末尾に配置されている場合でも読み出しが書き込みより先行し安全。 static void applyPaletteLUT(void* dst, const void* src, - int pixelCount, const PixelAuxInfo* aux) { + size_t pixelCount, const PixelAuxInfo* aux) { if (!aux || !aux->palette || !aux->paletteFormat) { - std::memset(dst, 0, static_cast(pixelCount)); + std::memset(dst, 0, pixelCount); return; } @@ -175,7 +175,7 @@ static void applyPaletteLUT(void* dst, const void* src, pixel_format::detail::lut8to16(reinterpret_cast(d), s, pixelCount, reinterpret_cast(p)); } else { - for (int i = 0; i < pixelCount; ++i) { + for (size_t i = 0; i < pixelCount; ++i) { std::memcpy(d + static_cast(i) * static_cast(bpc), p + static_cast(s[i]) * static_cast(bpc), static_cast(bpc)); @@ -188,7 +188,7 @@ static void applyPaletteLUT(void* dst, const void* src, // ======================================================================== static void index8_expandIndex(void* __restrict__ dst, const void* __restrict__ src, - int pixelCount, const PixelAuxInfo* __restrict__ aux) { + size_t pixelCount, const PixelAuxInfo* __restrict__ aux) { FLEXIMG_FMT_METRICS(Index8, ToStraight, pixelCount); applyPaletteLUT(dst, src, pixelCount, aux); } @@ -203,11 +203,11 @@ static void index8_expandIndex(void* __restrict__ dst, const void* __restrict__ // static void index8_toStraight(void* dst, const void* src, - int pixelCount, const PixelAuxInfo*) { + size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(Index8, ToStraight, pixelCount); const uint8_t* s = static_cast(src); uint8_t* d = static_cast(dst); - for (int i = 0; i < pixelCount; ++i) { + for (size_t i = 0; i < pixelCount; ++i) { uint8_t v = s[i]; d[i*4 + 0] = v; // R d[i*4 + 1] = v; // G @@ -226,13 +226,13 @@ static void index8_toStraight(void* dst, const void* src, // static void index8_fromStraight(void* dst, const void* src, - int pixelCount, const PixelAuxInfo*) { + size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(Index8, FromStraight, pixelCount); const uint8_t* s = static_cast(src); uint8_t* d = static_cast(dst); // 端数処理(1〜3ピクセル) - int remainder = pixelCount & 3; + size_t remainder = pixelCount & 3; while (remainder--) { d[0] = static_cast((77 * s[0] + 150 * s[1] + 29 * s[2] + 128) >> 8); s += 4; @@ -290,11 +290,11 @@ template static void indexN_expandIndex( void* __restrict__ dst, const void* __restrict__ src, - int pixelCount, + size_t pixelCount, const PixelAuxInfo* __restrict__ aux ) { if (!aux || !aux->palette || !aux->paletteFormat) { - std::memset(dst, 0, static_cast(pixelCount)); + std::memset(dst, 0, pixelCount); return; } @@ -320,7 +320,7 @@ template static void indexN_toStraight( void* __restrict__ dst, const void* __restrict__ src, - int pixelCount, + size_t pixelCount, const PixelAuxInfo* aux ) { uint8_t* d = static_cast(dst); @@ -336,7 +336,7 @@ static void indexN_toStraight( // スケーリング: IndexN値(0-MaxIndex) → 0-255 (Index8相当) constexpr int MaxIndex = (1 << BitsPerPixel) - 1; constexpr int Scale = 255 / MaxIndex; - for (int i = 0; i < pixelCount; ++i) { + for (size_t i = 0; i < pixelCount; ++i) { indexData[i] = static_cast(indexData[i] * Scale); } @@ -349,11 +349,11 @@ template static void indexN_fromStraight( void* __restrict__ dst, const void* __restrict__ src, - int pixelCount, + size_t pixelCount, const PixelAuxInfo* ) { - constexpr int MaxPixelsPerByte = 8 / BitsPerPixel; - constexpr int ChunkSize = 64; + constexpr size_t MaxPixelsPerByte = 8 / BitsPerPixel; + constexpr size_t ChunkSize = 64; uint8_t indexBuf[ChunkSize]; const uint8_t* srcPtr = static_cast(src); @@ -362,12 +362,12 @@ static void indexN_fromStraight( // 量子化シフト量 constexpr int QuantizeShift = 8 - BitsPerPixel; - int remaining = pixelCount; + size_t remaining = pixelCount; while (remaining > 0) { - int chunk = (remaining < ChunkSize) ? remaining : ChunkSize; + size_t chunk = (remaining < ChunkSize) ? remaining : ChunkSize; // BT.601 輝度計算 + 量子化 - for (int i = 0; i < chunk; ++i) { + for (size_t i = 0; i < chunk; ++i) { uint_fast16_t r = srcPtr[i * 4 + 0]; uint_fast16_t g = srcPtr[i * 4 + 1]; uint_fast16_t b = srcPtr[i * 4 + 2]; diff --git a/fleximg/src/fleximg/image/pixel_format/rgb332.h b/fleximg/src/fleximg/image/pixel_format/rgb332.h index 74cc83d9..6d65a193 100644 --- a/fleximg/src/fleximg/image/pixel_format/rgb332.h +++ b/fleximg/src/fleximg/image/pixel_format/rgb332.h @@ -67,7 +67,7 @@ alignas(64) static const uint32_t rgb332ToRgba8[256] = { } // namespace -static void rgb332_toStraight(void* dst, const void* src, int pixelCount, const PixelAuxInfo*) { +static void rgb332_toStraight(void* dst, const void* src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(RGB332, ToStraight, pixelCount); pixel_format::detail::lut8to32(static_cast(dst), static_cast(src), @@ -79,7 +79,7 @@ static void rgb332_toStraight(void* dst, const void* src, int pixelCount, const #define RGBA8_TO_RGB332(rgba) \ (((((rgba) >> 5) << 3) + (((rgba) >> 13) & 0x07)) << 2) + (((rgba) >> 22) & 0x03) -static void rgb332_fromStraight(void* dst, const void* src, int pixelCount, const PixelAuxInfo*) { +static void rgb332_fromStraight(void* dst, const void* src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(RGB332, FromStraight, pixelCount); uint8_t* d = static_cast(dst); const uint32_t* s = static_cast(src); diff --git a/fleximg/src/fleximg/image/pixel_format/rgb565.h b/fleximg/src/fleximg/image/pixel_format/rgb565.h index 7f537006..4d71ea61 100644 --- a/fleximg/src/fleximg/image/pixel_format/rgb565.h +++ b/fleximg/src/fleximg/image/pixel_format/rgb565.h @@ -134,7 +134,7 @@ alignas(64) static const uint16_t rgb565LowTable[256] = { d[d_off + 7] = 255; \ } while(0) -static void rgb565le_toStraight(void* __restrict__ dst, const void* __restrict__ src, int pixelCount, const PixelAuxInfo*) { +static void rgb565le_toStraight(void* __restrict__ dst, const void* __restrict__ src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(RGB565_LE, ToStraight, pixelCount); const uint8_t* __restrict__ s = static_cast(src); uint8_t* __restrict__ d = static_cast(dst); @@ -163,7 +163,7 @@ static void rgb565le_toStraight(void* __restrict__ dst, const void* __restrict__ (((((rgba) >> 3) << 6) + (((rgba) >> 10) & 0x3F)) << 5) + (((rgba) >> 19) & 0x1F) -static void rgb565le_fromStraight(void* __restrict__ dst, const void* __restrict__ src, int pixelCount, const PixelAuxInfo*) { +static void rgb565le_fromStraight(void* __restrict__ dst, const void* __restrict__ src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(RGB565_LE, FromStraight, pixelCount); uint16_t* __restrict__ d = static_cast(dst); const uint32_t* __restrict__ s = static_cast(src); @@ -222,7 +222,7 @@ static void rgb565le_fromStraight(void* __restrict__ dst, const void* __restrict d[d_off + 7] = 255; \ } while(0) -static void rgb565be_toStraight(void* __restrict__ dst, const void* __restrict__ src, int pixelCount, const PixelAuxInfo*) { +static void rgb565be_toStraight(void* __restrict__ dst, const void* __restrict__ src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(RGB565_BE, ToStraight, pixelCount); const uint8_t* __restrict__ s = static_cast(src); uint8_t* __restrict__ d = static_cast(dst); @@ -246,7 +246,7 @@ static void rgb565be_toStraight(void* __restrict__ dst, const void* __restrict__ #undef RGB565BE_TO_STRAIGHT_PIXEL_x2 -static void rgb565be_fromStraight(void* __restrict__ dst, const void* __restrict__ src, int pixelCount, const PixelAuxInfo*) { +static void rgb565be_fromStraight(void* __restrict__ dst, const void* __restrict__ src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(RGB565_BE, FromStraight, pixelCount); uint8_t* __restrict__ d = static_cast(dst); const uint32_t* __restrict__ s = static_cast(src); @@ -279,10 +279,10 @@ static void rgb565be_fromStraight(void* __restrict__ dst, const void* __restrict // 16bit用バイトスワップ(RGB565_LE ↔ RGB565_BE) // ======================================================================== -static void swap16(void* dst, const void* src, int pixelCount, const PixelAuxInfo*) { +static void swap16(void* dst, const void* src, size_t pixelCount, const PixelAuxInfo*) { const uint16_t* srcPtr = static_cast(src); uint16_t* dstPtr = static_cast(dst); - for (int i = 0; i < pixelCount; ++i) { + for (size_t i = 0; i < pixelCount; ++i) { uint16_t v = srcPtr[i]; dstPtr[i] = static_cast((v >> 8) | (v << 8)); } diff --git a/fleximg/src/fleximg/image/pixel_format/rgb888.h b/fleximg/src/fleximg/image/pixel_format/rgb888.h index d2e9a732..e47b9b3d 100644 --- a/fleximg/src/fleximg/image/pixel_format/rgb888.h +++ b/fleximg/src/fleximg/image/pixel_format/rgb888.h @@ -35,13 +35,13 @@ namespace FLEXIMG_NAMESPACE { // RGB888: 24bit RGB (mem[0]=R, mem[1]=G, mem[2]=B) // ======================================================================== -static void rgb888_toStraight(void* dst, const void* src, int pixelCount, const PixelAuxInfo*) { +static void rgb888_toStraight(void* dst, const void* src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(RGB888, ToStraight, pixelCount); const uint8_t* s = static_cast(src); uint8_t* d = static_cast(dst); // 端数処理(1〜3ピクセル) - int remainder = pixelCount & 3; + size_t remainder = pixelCount & 3; while (remainder--) { d[0] = s[0]; // R d[1] = s[1]; // G @@ -63,13 +63,13 @@ static void rgb888_toStraight(void* dst, const void* src, int pixelCount, const } } -static void rgb888_fromStraight(void* dst, const void* src, int pixelCount, const PixelAuxInfo*) { +static void rgb888_fromStraight(void* dst, const void* src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(RGB888, FromStraight, pixelCount); uint8_t* d = static_cast(dst); const uint8_t* s = static_cast(src); // 端数処理(1〜3ピクセル) - int remainder = pixelCount & 3; + size_t remainder = pixelCount & 3; while (remainder--) { d[0] = s[0]; // R d[1] = s[1]; // G @@ -94,13 +94,13 @@ static void rgb888_fromStraight(void* dst, const void* src, int pixelCount, cons // BGR888: 24bit BGR (mem[0]=B, mem[1]=G, mem[2]=R) // ======================================================================== -static void bgr888_toStraight(void* dst, const void* src, int pixelCount, const PixelAuxInfo*) { +static void bgr888_toStraight(void* dst, const void* src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(BGR888, ToStraight, pixelCount); const uint8_t* s = static_cast(src); uint8_t* d = static_cast(dst); // 端数処理(1〜3ピクセル) - int remainder = pixelCount & 3; + size_t remainder = pixelCount & 3; while (remainder--) { d[0] = s[2]; // R (src の B 位置) d[1] = s[1]; // G @@ -122,13 +122,13 @@ static void bgr888_toStraight(void* dst, const void* src, int pixelCount, const } } -static void bgr888_fromStraight(void* dst, const void* src, int pixelCount, const PixelAuxInfo*) { +static void bgr888_fromStraight(void* dst, const void* src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(BGR888, FromStraight, pixelCount); uint8_t* d = static_cast(dst); const uint8_t* s = static_cast(src); // 端数処理(1〜3ピクセル) - int remainder = pixelCount & 3; + size_t remainder = pixelCount & 3; while (remainder--) { d[0] = s[2]; // B d[1] = s[1]; // G @@ -154,11 +154,11 @@ static void bgr888_fromStraight(void* dst, const void* src, int pixelCount, cons // ======================================================================== // 24bit用チャンネルスワップ(RGB888 ↔ BGR888) -static void swap24(void* dst, const void* src, int pixelCount, const PixelAuxInfo*) { +static void swap24(void* dst, const void* src, size_t pixelCount, const PixelAuxInfo*) { const uint8_t* srcPtr = static_cast(src); uint8_t* dstPtr = static_cast(dst); - for (int i = 0; i < pixelCount; ++i) { - int idx = i * 3; + for (size_t i = 0; i < pixelCount; ++i) { + size_t idx = i * 3; dstPtr[idx + 0] = srcPtr[idx + 2]; dstPtr[idx + 1] = srcPtr[idx + 1]; dstPtr[idx + 2] = srcPtr[idx + 0]; diff --git a/fleximg/src/fleximg/image/pixel_format/rgba8_straight.h b/fleximg/src/fleximg/image/pixel_format/rgba8_straight.h index 2e2162f3..c024c104 100644 --- a/fleximg/src/fleximg/image/pixel_format/rgba8_straight.h +++ b/fleximg/src/fleximg/image/pixel_format/rgba8_straight.h @@ -35,14 +35,14 @@ namespace FLEXIMG_NAMESPACE { // ======================================================================== // RGBA8_Straight: Straight形式なのでコピー -static void rgba8Straight_toStraight(void* dst, const void* src, int pixelCount, const PixelAuxInfo*) { +static void rgba8Straight_toStraight(void* dst, const void* src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(RGBA8_Straight, ToStraight, pixelCount); - std::memcpy(dst, src, static_cast(pixelCount) * 4); + std::memcpy(dst, src, pixelCount * 4); } -static void rgba8Straight_fromStraight(void* dst, const void* src, int pixelCount, const PixelAuxInfo*) { +static void rgba8Straight_fromStraight(void* dst, const void* src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(RGBA8_Straight, FromStraight, pixelCount); - std::memcpy(dst, src, static_cast(pixelCount) * 4); + std::memcpy(dst, src, pixelCount * 4); } // blendUnderStraight: RGBA8_Straight形式のunder合成(背面への合成) @@ -65,7 +65,7 @@ static void rgba8Straight_fromStraight(void* dst, const void* src, int pixelCoun // - dstW = (dstA * 255 * 256) / total, srcW = 256 - dstW // - 色計算: (d * dstW + s * srcW) >> 8 // - R,Bチャンネルを32ビット演算でまとめて処理 -static void rgba8Straight_blendUnderStraight(void* __restrict__ dst, const void* __restrict__ src, int pixelCount, const PixelAuxInfo*) { +static void rgba8Straight_blendUnderStraight(void* __restrict__ dst, const void* __restrict__ src, size_t pixelCount, const PixelAuxInfo*) { FLEXIMG_FMT_METRICS(RGBA8_Straight, BlendUnder, pixelCount); if (pixelCount <= 0) return; diff --git a/fleximg/src/fleximg/image/viewport.h b/fleximg/src/fleximg/image/viewport.h index 9f54d244..70f56471 100644 --- a/fleximg/src/fleximg/image/viewport.h +++ b/fleximg/src/fleximg/image/viewport.h @@ -113,7 +113,7 @@ void clear(ViewPort& dst, int x, int y, int width, int height); void copyRowDDA( void* dst, const ViewPort& src, - int count, + int_fast16_t count, int_fixed srcX, int_fixed srcY, int_fixed incrX, @@ -128,7 +128,7 @@ void copyRowDDA( void copyRowDDABilinear( void* dst, const ViewPort& src, - int count, + int_fast16_t count, int_fixed srcX, int_fixed srcY, int_fixed incrX, @@ -231,7 +231,7 @@ namespace view_ops { void copyRowDDA( void* dst, const ViewPort& src, - int count, + int_fast16_t count, int_fixed srcX, int_fixed srcY, int_fixed incrX, @@ -370,7 +370,7 @@ static void bilinearBlend_1ch( void copyRowDDABilinear( void* dst, const ViewPort& src, - int count, + int_fast16_t count, int_fixed srcX, int_fixed srcY, int_fixed incrX, @@ -413,15 +413,15 @@ void copyRowDDABilinear( weightsXY, edgeFlagsChunk }; - for (int offset = 0; offset < count; offset += CHUNK_SIZE) { - int chunk = (count - offset < CHUNK_SIZE) ? (count - offset) : CHUNK_SIZE; + for (int_fast16_t offset = 0; offset < count; offset += CHUNK_SIZE) { + int_fast16_t chunk = (count - offset < CHUNK_SIZE) ? (count - offset) : CHUNK_SIZE; // 4ピクセル抽出(1 byte/pixel: copyQuadDDA出力がそのまま使える) src.formatID->copyQuadDDA(quadBuffer1ch, srcData, chunk, ¶m); // 境界ピクセルの値を0化(Alpha8のエッジフェード) if (edgeFadeMask) { - for (int i = 0; i < chunk; ++i) { + for (int_fast16_t i = 0; i < chunk; ++i) { uint8_t flags = edgeFlagsChunk[i] & edgeFadeMask; if (flags) { uint8_t* q = &quadBuffer1ch[i * 4]; @@ -492,8 +492,8 @@ void copyRowDDABilinear( edgeFlagsChunk }; - for (int offset = 0; offset < count; offset += CHUNK_SIZE) { - int chunk = (count - offset < CHUNK_SIZE) ? (count - offset) : CHUNK_SIZE; + for (int_fast16_t offset = 0; offset < count; offset += CHUNK_SIZE) { + int_fast16_t chunk = (count - offset < CHUNK_SIZE) ? (count - offset) : CHUNK_SIZE; // 4ピクセル抽出 + edgeFlags生成(末尾詰め配置でin-place変換可能) int srcQuadSize = srcBytesPerPixel * 4 * chunk; @@ -510,7 +510,7 @@ void copyRowDDABilinear( // 境界ピクセルのアルファ0化(edgeFlagsに基づく) if (edgeFadeMask) { auto quad = reinterpret_cast(quadRGBA) + 3; - for (int i = 0; i < chunk; ++i) { + for (int_fast16_t i = 0; i < chunk; ++i) { uint8_t flags = edgeFlagsChunk[i] & edgeFadeMask; if (flags) { if (flags & (EdgeFade_Left | EdgeFade_Top)) { quad[0] = 0; } @@ -567,7 +567,7 @@ void affineTransform( int_fixed srcX = incrX * dxStart + rowBaseX + dxOffsetX; int_fixed srcY = incrY * dxStart + rowBaseY + dxOffsetY; - int count = dxEnd - dxStart + 1; + int_fast16_t count = static_cast(dxEnd - dxStart + 1); void* dstRow = dst.pixelAt(dxStart, dy); diff --git a/fleximg/src/fleximg/operations/filters.h b/fleximg/src/fleximg/operations/filters.h index 2635b23c..417f2f50 100644 --- a/fleximg/src/fleximg/operations/filters.h +++ b/fleximg/src/fleximg/operations/filters.h @@ -22,7 +22,7 @@ struct LineFilterParams { }; /// ラインフィルタ関数型(RGBA8_Straight形式、インプレース処理) -using LineFilterFunc = void(*)(uint8_t* pixels, int count, const LineFilterParams& params); +using LineFilterFunc = void(*)(uint8_t* pixels, int_fast16_t count, const LineFilterParams& params); // ======================================================================== // ラインフィルタ関数(スキャンライン処理用) @@ -34,15 +34,15 @@ using LineFilterFunc = void(*)(uint8_t* pixels, int count, const LineFilterParam /// 明るさ調整(ラインフィルタ版) /// params.value1: 明るさ調整量(-1.0〜1.0、0.5で+127相当) -void brightness_line(uint8_t* pixels, int count, const LineFilterParams& params); +void brightness_line(uint8_t* pixels, int_fast16_t count, const LineFilterParams& params); /// グレースケール変換(ラインフィルタ版) /// パラメータ未使用(将来の拡張用に引数は維持) -void grayscale_line(uint8_t* pixels, int count, const LineFilterParams& params); +void grayscale_line(uint8_t* pixels, int_fast16_t count, const LineFilterParams& params); /// アルファ調整(ラインフィルタ版) /// params.value1: アルファスケール(0.0〜1.0) -void alpha_line(uint8_t* pixels, int count, const LineFilterParams& params); +void alpha_line(uint8_t* pixels, int_fast16_t count, const LineFilterParams& params); } // namespace filters } // namespace FLEXIMG_NAMESPACE @@ -62,11 +62,11 @@ namespace filters { // ラインフィルタ関数(スキャンライン処理用) // ======================================================================== -void brightness_line(uint8_t* pixels, int count, const LineFilterParams& params) { +void brightness_line(uint8_t* pixels, int_fast16_t count, const LineFilterParams& params) { int adjustment = static_cast(params.value1 * 255.0f); - for (int x = 0; x < count; x++) { - int pixelOffset = x * 4; + for (int_fast16_t x = 0; x < count; x++) { + int_fast16_t pixelOffset = x * 4; // RGB各チャンネルに明るさ調整を適用 for (int c = 0; c < 3; c++) { int value = static_cast(pixels[pixelOffset + c]) + adjustment; @@ -76,11 +76,11 @@ void brightness_line(uint8_t* pixels, int count, const LineFilterParams& params) } } -void grayscale_line(uint8_t* pixels, int count, const LineFilterParams& params) { +void grayscale_line(uint8_t* pixels, int_fast16_t count, const LineFilterParams& params) { (void)params; // 将来の拡張用に引数は維持 - for (int x = 0; x < count; x++) { - int pixelOffset = x * 4; + for (int_fast16_t x = 0; x < count; x++) { + int_fast16_t pixelOffset = x * 4; // グレースケール変換(平均法) uint8_t gray = static_cast( (static_cast(pixels[pixelOffset]) + @@ -94,11 +94,11 @@ void grayscale_line(uint8_t* pixels, int count, const LineFilterParams& params) } } -void alpha_line(uint8_t* pixels, int count, const LineFilterParams& params) { +void alpha_line(uint8_t* pixels, int_fast16_t count, const LineFilterParams& params) { uint32_t alphaScale = static_cast(params.value1 * 256.0f); - for (int x = 0; x < count; x++) { - int pixelOffset = x * 4; + for (int_fast16_t x = 0; x < count; x++) { + int_fast16_t pixelOffset = x * 4; // RGBはそのまま、Alphaのみスケール uint32_t a = pixels[pixelOffset + 3]; pixels[pixelOffset + 3] = static_cast((a * alphaScale) >> 8); From 03bea68b0f088279543882afcc0988f9e34e2700 Mon Sep 17 00:00:00 2001 From: ainyan03 Date: Sun, 8 Feb 2026 06:31:26 +0900 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20CHANGELOG.md=E3=81=AB=E9=96=A2?= =?UTF-8?q?=E6=95=B0=E3=83=9D=E3=82=A4=E3=83=B3=E3=82=BF=E5=9E=8B=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=81=AE=E5=A4=89=E6=9B=B4=E5=B1=A5=E6=AD=B4=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fleximg/CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fleximg/CHANGELOG.md b/fleximg/CHANGELOG.md index 31e9c3e2..b8ae13f3 100644 --- a/fleximg/CHANGELOG.md +++ b/fleximg/CHANGELOG.md @@ -12,6 +12,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed +- **関数ポインタ型の `int` 引数を `size_t` / `int_fast16_t` に修正** + - `ConvertFunc` 系(ピクセル変換関数): `int pixelCount` → `size_t pixelCount` + - `CopyRowDDA_Func` / `CopyQuadDDA_Func`(DDA転送関数): `int count` → `int_fast16_t count` + - `LineFilterFunc`(ラインフィルタ関数): `int count` → `int_fast16_t count` + - 対象12ファイルの実装・ローカル変数も型を統一 + - **bit-packed unpackロジック集約 + Index8処理共通化** - パレットLUT処理を `applyPaletteLUT` 共通関数として切り出し、Index8/IndexN で共有 - `indexN_expandIndex` を末尾詰め方式に変更(チャンクバッファ不要、in-place展開)