Ich habe 2 Formulare, A und B. Auf Formular A klicke ich auf eine Schaltfläche, und ein Bild wird in ein PictureBox auf Formular B geladen. Und ich möchte diesem Bild einen Graustufen-Effekt verleihen, indem ich:
public void SetGrayScale(PictureBox pb)
{
ColorMatrix matrix = new ColorMatrix(new float[][]
{
new float[] {0.299f, 0.299f, 0.299f, 0, 0},
new float[] {0.587f, 0.587f, 0.587f, 0, 0},
new float[] {0.114f, 0.114f, 0.114f, 0, 0},
new float[] { 0, 0, 0, 1, 0},
new float[] { 0, 0, 0, 0, 0}
});
Image image = (Bitmap)pb.Image.Clone();
ImageAttributes attributes = new ImageAttributes();
attributes.SetColorMatrix(matrix);
Graphics graphics = Graphics.FromImage(image);
graphics.DrawImage(image,
new Rectangle(0, 0, image.Width, image.Height),
0,
0,
image.Width,
image.Height,
GraphicsUnit.Pixel,
attributes);
graphics.Dispose();
pb.Image = image;
}
Dieser Code funktioniert einwandfrei, wenn sich das PictureBox auf dem gleichen Formular (A) befindet. Wenn es sich jedoch auf Formular B befindet, wird eine OutOfMemoryException ausgelöst. Warum?
0 Stimmen
Wo wird die OutOfMemoryException ausgelöst?
0 Stimmen
@Tony: Sie sollten Fragen zu Ihrer Frage oder zu anderen Antworten beantworten, indem Sie einen Kommentar hinzufügen, anstatt jedes Mal eine neue Antwort hinzuzufügen.