首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

影像負片效果(反色)單函數實作:ScanLine 逐行高速處理

     編輯:關於C++

24-bit BMP 影像反色(負片)運算:每通道 255 - value。以 ScanLine 逐行直接操作記憶體,無分支、極高效率。

完整函數

void S_RevColor(Graphics::TBitmap* Bmp) {
    for (int y = 0; y < Bmp->Height; ++y) {
        BYTE* ptr = (BYTE*)Bmp->ScanLine[y]; // BGR 順序
        for (int x = 0; x < Bmp->Width * 3; x += 3) {
            ptr[x]     = 255 - ptr[x];     // Blue
            ptr[x + 1] = 255 - ptr[x + 1]; // Green
            ptr[x + 2] = 255 - ptr[x + 2]; // Red
        }
    }
}

呼叫範例

Graphics::TBitmap* bmp = new Graphics::TBitmap;
bmp->Assign(Image1->Picture->Bitmap); // 複製備份
S_RevColor(bmp);
Image1->Picture->Bitmap->Assign(bmp);
delete bmp;

關鍵點

  • ScanLine 回傳該行首像素指標,24-bit 格式每像素 3 位元組 (BGR),每行 4 位元組對齊
  • 就地修改:直接在傳入 TBitmap 上運算,無額外記憶體分配
  • 無分支:減法指令極快,現代 CPU 單指令可處理多組 (SIMD 自動向量化)
  • 可擴充:同樣模式套用亮度/對比度/伽瑪校正:ptr[x] = clamp(ptr[x]*contrast + brightness)

效能參考

4K 影像 (3840×2160) 約 2500 萬像素,單執行緒 < 15 ms (i7-12700K),滿足即時預覽需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved