Επαναχρωματισμός εικόνας bitmap
Στο παράδειγμα
που ακολουθεί, επαναχρωματίζουμε τα ροζ pixels της
εικόνας σε μπλε. Για το σκοπό αυτό, κάνουμε χρήση της μεθόδου SetPixel, της κλάσης Bitmap.
Επίσης, η μέθοδος GetPixel λαμβάνει το τρέχον χρώμα
ενός pixel της εικόνας. Η λογική είναι απλή: Διατρέχουμε pixel προς pixel όλη
την εικόνα και όπου συναντούμε pixel χρώματος ροζ το αλλάζουμε σε μπλε.
Στην παρακάτω
εικόνα, βλέπουμε την πρωτότυπη και την τροποποιημένη έκδοσή της.
Ο κώδικας
τοποθετείται στη ρουτίνα OnPaint
της φόρμας :
Protected Overrides Sub OnPaint(ByVal e As _
System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
'ΠΡΩΤΟΤΥΠΗ ΕΙΚΟΝΑ.
'Φόρτωσε την εικόνα στο αντικείμενο.
Dim myBitmap As New Bitmap("GDI+
picture.png")
'Καθόρισε την περιοχή
εμφάνισης της εικόνας.
'Ανω αριστερή γωνία στο σημείο (10,10)
'με πλάτος 200 και ύψος 120 pixels.
Dim rectBitmap
As New Rectangle(10,
10, 200, 120)
'Εμφάνισέ την στην
καθορισμένη περιοχή.
e.Graphics.DrawImage(myBitmap, rectBitmap)
'ΑΛΛΑΓΗ ΧΡΩΜΑΤΙΣΜΟΥ
ΤΩΝ ΡΟΖ PIXELS ΣΕ ΜΠΛΕ.
'Όρισε ένα αντίγραφο της πρωτότυπης.
Dim myBitmapClone As Bitmap = myBitmap.Clone
'Πού θα εμφανιστεί.
Dim rectClone As New Rectangle(10,
150, 200, 120)
'Πάρε το χρώμα του Pixel στη θέση (1,1).
Dim clrBack As Color = myBitmapClone.GetPixel(1, 1)
'Νέο back χρώμα το μπλε - με alpha value το άσπρο.
Dim clrNewBack As Color = Color.FromArgb(255, 0, 0,
255)
'Αλλαξε
το χρώμα όλων των ροζ pixels σε μπλε.
Dim clr As Color
Dim x%, y%
For x = 0 To myBitmapClone.Width - 1
For y = 0 To myBitmapClone.Height - 1
'Πάρε το back χρώμα του pixel στη θέση (x,y).
clr = myBitmapClone.GetPixel(x, y)
'Αν είναι ίδιο με το background χρώμα...
If clr.Equals(clrBack) Then
Try
'τότε άλλαξέ το σε
μπλε.
'Μόνο για non index-based
format bitmaps!...
myBitmapClone.SetPixel(x, y, clrNewBack)
Catch
'…αλλιώς run-time error.
MsgBox(Err.GetException.Message)
End Try
End If
Next
Next
'Σχεδίασέ την με το νέο background χρώμα.
e.Graphics.DrawImage(myBitmapClone, rectClone)
'Καθάρισε.
myBitmap.Dispose() : myBitmapClone.Dispose()
rectBitmap = Nothing : rectClone
= Nothing
End Sub
Να σημειωθεί ότι η μέθοδος SetPixel λειτουργεί μόνο για εικόνες με βάθος
χρώματος μεγαλύτερο των 8 bit (JPEG, PNG κλπ, όχι
GIF). .
·
Χρήστος
Μουρατίδης