VB 2003: image/bitmap von bunt in Graustufen umwandeln

21/11/2007 - 11:15 von Ursula Spit | Report spam
Hallo zusammen,

leider habe ich Probleme eine Image/bitmap von Farbe in Graustufen
umzuwandeln. Folgenden Code habe ich bereits programmiert:

Private Sub grey(ByVal bmp As Bitmap)
Dim grau, blau, gruen, rot As Byte
Dim bmpData As System.Drawing.Imaging.BitmapData

bmpData = bmp.LockBits(New Rectangle(0, 0, bmp.Width, bmp.Height),
Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat)
Dim size As Integer = bmp.Width * bmp.Height * 4
Dim ba(size) As Byte
Marshal.Copy(bmpData.Scan0, ba, 0, size)
' ******************************> Fehlermeldung hier: Der Objektverweis
wurde nicht auf eine Objektinstanz festgelegt*********************

For i As Integer = 0 To size - 1 Step 4
blau = ba(i)
gruen = ba(i + 1)
rot = ba(i + 2)
grau = ((77 * blau + 151 * gruen + 28 * rot) / 256)
ba(i) = grau
ba(i + 1) = grau
ba(i + 2) = grau
Next

Marshal.Copy(ba, 0, bmpData.Scan0, size)
bmp.UnlockBits(bmpData)

End Sub



Was mache ich falsch?

Oder gibt es eine andere (einfachere) Lösung?

Über eine Antwort würde ich mich freuen,
Ursula
 

Lesen sie die antworten

#1 Karsten Sosna
21/11/2007 - 11:54 | Warnen spam
leider habe ich Probleme eine Image/bitmap von Farbe in Graustufen
umzuwandeln. Folgenden Code habe ich bereits programmiert:

Private Sub grey(ByVal bmp As Bitmap)
Dim grau, blau, gruen, rot As Byte
Dim bmpData As System.Drawing.Imaging.BitmapData

bmpData = bmp.LockBits(New Rectangle(0, 0, bmp.Width, bmp.Height),
Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat)
Dim size As Integer = bmp.Width * bmp.Height * 4
Dim ba(size) As Byte
Marshal.Copy(bmpData.Scan0, ba, 0, size)
' ******************************> Fehlermeldung hier: Der Objektverweis
wurde nicht auf eine Objektinstanz festgelegt*********************

For i As Integer = 0 To size - 1 Step 4
blau = ba(i)
gruen = ba(i + 1)
rot = ba(i + 2)
grau = ((77 * blau + 151 * gruen + 28 * rot) / 256)
ba(i) = grau
ba(i + 1) = grau
ba(i + 2) = grau
Next

Marshal.Copy(ba, 0, bmpData.Scan0, size)
bmp.UnlockBits(bmpData)

End Sub

Was mache ich falsch?



Hallo Ursula,
die Größe wird auf jeden Fall falsch berechnet. Sollte es sich bei der
Eingangsgrafik nicht um eine 32BitARGB-Grafik handeln stimmt die Lànge des
Arrays auf keinen Fall. Ansonsten ist das Array 1 Byte zu lang(Das ist aber
kein Problem). Die Fehlermeldung kann ich nicht genau interpretieren, wo die
hingehört, ich schàtze aber mal zu Marshal.Copy. Dann würde ich mal bmdData
anschauen. Kann mir nur vorstellen das es an der Bitmap liegt, hast Du mal
PixelFormat überprüft?
Gruß Scotty

Ähnliche fragen