2009-08-13 16 views
3

Ich mache eine einfache Bildbearbeitung in VB.NET, und eine der Funktionen ist Helligkeit/Belichtung.Helligkeit/Belichtungsfunktion mit vb .net

das ist, wie ich es so mache:

For i = 0 To img.Width - 1 
    For j = 0 To img.Height - 1 
     Dim s As Color = img.GetPixel(i, j) 

     Dim r As Integer = s.R * 2 
     Dim g As Integer = s.G * 2 
     Dim b As Integer = s.B * 2 
     If s.R * 2 > 255 Then 
      r = 255 
     End If 

     If s.G * 2 > 255 Then 
      g = 255 
     End If 
     If s.B * 2 > 255 Then 
      b = 255 
     End If 
     Dim x As Color = Color.FromArgb(255, r, g, b) 
     img.SetPixel(i, j, x) 

    Next 
Next 

wo 2 Helligkeit, die es doppelt so hell macht.

Das einzige Problem ist, das scheint nicht gut zu funktionieren, weil es es tut, aber dauert etwa 30 Sekunden! Was mache ich falsch? Gibt es einen besseren Weg, es zu implementieren?

Dank

Antwort

2

Sie können eine Colormatrix und Imageattributes verwenden, um es viel schneller zu tun. Hier ist wie:

Imports System.Drawing.Imaging 

Public Class Form1 

Dim g As Graphics 
Dim img As Image 
Dim r As Rectangle 

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    ' load photo file into picture box and initialize graphics 
    img = Image.FromFile("c:\tmp.jpg") 
    PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height, PixelFormat.Format32bppArgb) 
    g = Graphics.FromImage(PictureBox1.Image) 
    r = New Rectangle(0, 0, PictureBox1.Width, PictureBox1.Height) 
    g.DrawImage(img, r) 
End Sub 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Call setBrightness(0.2) 
End Sub 

Sub setBrightness(ByVal Brightness As Single) 
    ' Brightness should be -1 (black) to 0 (neutral) to 1 (white) 

    Dim colorMatrixVal As Single()() = { _ 
    New Single() {1, 0, 0, 0, 0}, _ 
    New Single() {0, 1, 0, 0, 0}, _ 
    New Single() {0, 0, 1, 0, 0}, _ 
    New Single() {0, 0, 0, 1, 0}, _ 
    New Single() {Brightness, Brightness, Brightness, 0, 1}} 

    Dim colorMatrix As New ColorMatrix(colorMatrixVal) 
    Dim ia As New ImageAttributes 

    ia.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap) 

    g.DrawImage(img, r, 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, ia) 
    PictureBox1.Refresh() 
End Sub 

End Class 
1

die folgenden Beispiele verwenden sollte es recht einfach sein, ein Projekt zusammen zu stellen, der die Helligkeit/Kontrast und andere Merkmale der Bilder ändert.

hier ist ein Beispiel einer Colormatrix der Verwendung der Lage sein, ein Bild zu ändern, sollte es viel schneller:

http://www.developerfusion.com/forum/thread/35125/

und hier ist ein Beispiel für Helligkeit und Kontrast bei gleichzeitig tun:

http://www.codeproject.com/KB/graphics/multiple_color_matrices.aspx

ein weiteres Beispiel der Verwendung einer Colormatrix:

und als Referenz auf Colormatrix:

http://msdn.microsoft.com/en-us/library/ms534063%28VS.85%29.aspx