程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> GDI+ 在Delphi程序的應用 -- 圖像亮度/對比度調整

GDI+ 在Delphi程序的應用 -- 圖像亮度/對比度調整

編輯:關於SqlServer
  本人已經寫過幾篇關於亮度調整的文章,但是關於圖像的對比度調整的過程和文章卻一直沒有寫,其原因是一直沒找到一個好的算法。可能有人會說,圖像的亮度,對比度調整是最簡單的圖形操作,其算法網上可說是一搜一大把,確實如此,可就是這最簡單的操作,網上的文章卻五花八門,我揀幾個試了一下,好像都不太理想,關鍵是算法太簡單,實際操作效果不好,於是想,Photoshop的對比度還是較好的,而且也通用,但偏偏網上沒有介紹它的算法,用了大半天時間研究了一下,再花了1個來小時寫了個Delphi過程,試了一下,居然和Photoshop的對比度調整完全一樣的效果!於是認真寫了個測試程序,把亮度和對比度放在一起進行調整(亮度和對比度處理過程為各自獨立的,其中亮度過程基本是本BLOG文章《GDI+ 在Delphi程序的應用 -- 調整圖像亮度》的代碼),可是效果卻和Photoshop大不一樣了,是什麼原因呢,Photoshop的亮度調整算法是最簡單的那種,與我的亮度過程做出來的是一樣的(效果比較圖參見《GDI+ 在Delphi程序的應用 -- 線性調整圖像亮度》),而前面說了,對比度過程算法也是和Photoshop一樣的,可放在一起調整就不行了,無論是先調整亮度,還是先調整對比度都這樣。後來仔細分析了一下,Photoshop是用一個函數處理亮度/對比度,而且亮度調整是按對比度的正負分別對待的,沒辦法,只好將2個過程合並,再加上個灰度統計過程,代碼很長的(依然是BASM寫的,有人對我說,為什麼不用純Pascal寫,我試著用Pascal寫過,有些處理太慢了,後面我把基本算法用偽代碼寫出來,喜歡用純Pascal或者C/C++的可以自己去寫):

type
  TImageGrayArray = array[0..255] of LongWord;

procedure SumGray(Data: TBitmapData; var Grays: TImageGrayArray; IsGpBitmap: Boolean);
asm
    push    ebp
    push    esi
    push    edi
    push    ebx
    sub     esp, 12

    mov     ebp, eax
    mov     edi, edx
    mov     [esp + 4],
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved