Hallo.
Danke für den Tip.
@Th69:
Ich habe im Netz folgende Funktion gefunden. Diese stützt sich auf deine Tips.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
| public static Bitmap ConvertBitmap(Bitmap bitmap, PixelFormat format) { if (bitmap == null) { throw new ArgumentNullException("bitmap"); }
Bitmap result = null; try { Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
result = new Bitmap(bitmap.Width, bitmap.Height, format);
BitmapData dstData = result.LockBits(rect, ImageLockMode.WriteOnly, format); try { BitmapData srcData = new BitmapData();
srcData.Scan0 = dstData.Scan0;
srcData.Stride = dstData.Stride;
bitmap.LockBits(rect, ImageLockMode.ReadOnly | ImageLockMode.UserInputBuffer, format, srcData);
bitmap.UnlockBits(srcData);
} finally { result.UnlockBits(dstData); } } catch { if (result != null) { result.Dispose(); } } return result; } |
Nur wird ein Fehler in der Codezeile 25 ausgelöst (Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.):
C#-Quelltext
1:
| bitmap.LockBits(rect, ImageLockMode.ReadOnly | ImageLockMode.UserInputBuffer, format, srcData); |
Die Funktion rufe ich wie folgt auf:
C#-Quelltext
1:
| Bitmap Bild_neu = ConvertBitmap(Bild_original, PixelFormat.Format8bppIndexed); |
Hierbei ist das Pixelformat von Bild_original = Format32bppPArgb.
Könnt ihr mir helfen, diese Funktion so hinzubekommen, dass es funktioniert?
Ich habe mal Kommentare dazugeschrieben. Völlig offen für mich ist, wie das Quell-Bitmap zum Ziel-Bitmap kopiert wird. Das wird sicherlich genau in der Zeile 25 gemacht. Kann mir das jemand erklären?
Gruß
Rasmus