• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    用VB設計圖像濾鏡

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 13次 | 進入軟件測試論壇討論

    領測軟件測試網 作者:任毅

    PhotoShop圖像處理軟件最引人之處莫過于它的濾鏡功能,如果你掌握了一些VB的知識,那么你也能夠設計出圖像處理大師級的濾鏡效果。

        首先你必須了解VB中圖像處理的一些基本知識。在VB中有兩個操作像素的基本方法:PSet和Point。PSet生成像素;Point則讀取像素值。并且顯示器上所能顯示的所有顏色都可以用RGB值來表示,VB中提供了RGB()函數,有三個變量RGB(Red,Green,Blue),如RGB(255,0,0)表示紅色,RGB(255,255,0)表示黃色等。 VB中沒有提供將一個像素點的顏色返回成RGB值的函數,但我們可以用以下方法獲得某一點的RGB值:

        Pi& = Picture.Point(X, Y)

        Red = Pi& Mod 256

        Green = ((pi& And &HFF00) / 256&) Mod 256&

        Blue = (pi1& And &HFF0000) / 65536

        有了以上知識,再通過一些濾鏡算法便可以產生一些很不錯的濾鏡效果。在此以浮雕、木刻、油畫和燈光共四個濾鏡效果為例。

        具體操作步驟如下:

        新建一個窗體 Form1,在圖體上建立一個Picture1圖像框,將其AutoSize的值設為 Ture,然后用Picture1的LoadPicture()命令調入一幅圖像,再通過各種事件調用過濾過程(這里以Picture1_Click()事件來調用)。

      以下為具體代碼:

        Private Sub Form_Load()

         Form1.AutoRedraw = True

         Form1.ScaleMode = 3

         Picture1.AutoRedraw = True

         Picture1.ScaleMode = 3

         Picture1.Picture = LoadPicture(圖像文件全途徑名)

        End Sub

      浮雕
    浮雕的算法是在相鄰像素的差值上加上一個常數,使黑暗區域增加一些亮度,我們可以取同一行、同一列或對角線上的相鄰像素間的差值加上一個常數。

       Private Sub Picture1_Click()

        Dim pi1&, pi2&

        Dim x, y

        Dim A, B As Integer

        Dim Red, Green, Blue As Integer

       A = 1

        B = 1

        xx = Picture1.ScaleWidth

        yy = Picture1.ScaleHeight

        For x = 1 To xx - 2

         For y = 1 To yy - 2

         pi1& = Picture1.Point(x, y)

        pi2& = Picture1.Point(x + A, y + B)

        Red = Abs((pi1& Mod 256) - (pi2& Mod 256) + 128)

        Green = Abs((((pi1& And &HFF00) / 256&) Mod 256&) - (((pi2& And &HFF00) / 256&) Mod 256&) + 128)

        Blue = Abs(((pi1& And &HFF0000) / 65536) - ((pi2& And &HFF0000) / 65536) + 128)

        Picture1.PSet (x, y), RGB(Red, Green, Blue)

        Next y

        Next x

        Picture1.Refresh

        End Sub

      油畫

        油畫濾鏡的算法是:用當前點四周一定范圍內任一點的顏色來代替當前點的顏色。

       Private Sub Picture1_Click()

       Dim pi&

        Dim x, y

       Dim A, B As Integer

       Dim Red, Green, Blue As Integer

       xx = Picture1.ScaleWidth

       yy = Picture1.ScaleHeight

       For x = 2 To xx - 3

        For y = 2 To yy - 3

       A = Rnd * 3 - 1

      B = Rnd * 3 - 1

       pi = Picture1.Point(x + A, y + B)

        Red = (pi& Mod 256)

        Green = (((pi& And &HFF00) / 256&) Mod 256&)

        Blue = ((pi& And &HFF0000) / 65536)

        Picture1.PSet (x, y), RGB(Red, Green, Blue)

        Next y

        DoEvents

        Next x

        Picture1.Refresh

       End Sub

      木刻(圖三)

        這個濾鏡的算法相對簡單一點。只需判斷當前點是淺色還是深色(即三顏色元素的平均值是否大于128),淺色用白色RGB(255,255,255)代替;深色用黑色RGB(0,0,0)代替。

       Private Sub Picture1_Click()

        Dim pi&

        Dim x, y

        Dim A, B As Integer

        Dim Red, Green, Blue As Integer

        A = 1

        B = 1

        xx = Picture1.ScaleWidth

        yy = Picture1.ScaleHeight

        For x = 0 To xx

        For y = 0 To yy

        pi = Picture1.Point(x, y)

       Red = (pi& Mod 256)

       Green = (((pi& And &HFF00) / 256&) Mod 256&)

       Blue = ((pi& And &HFF0000) / 65536)

       If (Red + Green + Blue) / 3 < 128 Then

       Picture1.PSet (x, y), RGB(0, 0, 0)

       Else

       Picture1.PSet (x, y), RGB(255, 255, 255)

       End If

       Next y

       Next x

       Picture1.Refresh

       End Sub

      燈光

        燈光濾鏡的算法很多,這里介紹一種小口徑燈光濾鏡,具體算法是取一點為光源(這里以30,40為例),從光線末端開始向光源點逐漸增加亮度(向白色接近)。代碼為:

       Private Sub Picture1_Click()

        Dim pi1&, pi2&

        Dim x, y

        Dim A, B As Integer

        Dim Red, Green, Blue As Integer

        A = 30

        B = 40

        xx = Picture1.ScaleWidth

        yy = Picture1.ScaleHeight

        For x = 1 To xx

        For y = 1 To yy

        pi1 = Picture1.Point(x, y)

       If Sqr((A - x) * (A - x) + (B - y) * (B - y)) - 40 < 0 Then

       Red = ((pi1& Mod 256) + 200 * (1 - (Sqr((A - x) * (A - x) + (B - y) * (B - y)) + 1) / 40))

       Green = ((((pi1& And &HFF00) / 256&) Mod 256&) + 200 * (1 - (Sqr((A - x) * (A - x) + (B - y) * (B - y)) + 1) / 40))

       Blue = (((pi1& And &HFF0000) / 65536) + 200 * (1 - (Sqr((A - x) * (A - x) + (B - y) * (B - y)) + 1) / 40))

       If Red < 0 Then Red = 0

       If Red > 255 Then Red = 255

       If Green < 0 Then Green = 0

       If Green > 255 Then Green = 255

       If Blue < 0 Then Blue = 0

       If Blue > 255 Then Blue = 255

       Picture1.PSet (x, y), RGB(Red, Green, Blue)

       End If

       Next y

       Next x

       Picture1.Refresh

       End Sub

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>