J'utilise C# .NET 3.5 et Windows Form J'ai ce code pour gérer la luminosité d'une image, il active lorsque le TrackBar ValueChangesSi j'utilise .Dispose(); pourquoi je continue d'avoir une sortie de la mémoire
public void brightnesstrackBar1_ValueChanged(object sender, EventArgs e)
{
domainUpDownB.Text = ((int)brightnessTrackBar.Value).ToString();
B = ((int)brightnessTrackBar.Value);
pictureBox2.Image = AdjustBrightness(foto, B);
foto1 = (Bitmap)pictureBox2.Image;
}
public static Bitmap AdjustBrightness(Bitmap Image, int Value)
{
Bitmap TempBitmap = Image;
float FinalValue = (float)Value/255.0f;
Bitmap NewBitmap = new System.Drawing.Bitmap(TempBitmap.Width, TempBitmap.Height);
Graphics NewGraphics = Graphics.FromImage(NewBitmap);
float[][] FloatColorMatrix ={
new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0, 0, 1, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {FinalValue, FinalValue, FinalValue, 1, 1
}
};
ColorMatrix NewColorMatrix = new ColorMatrix(FloatColorMatrix);
ImageAttributes Attributes = new ImageAttributes();
Attributes.SetColorMatrix(NewColorMatrix);
NewGraphics.DrawImage(TempBitmap, new System.Drawing.Rectangle(0, 0, TempBitmap.Width, TempBitmap.Height), 0, 0, TempBitmap.Width, TempBitmap.Height, System.Drawing.GraphicsUnit.Pixel, Attributes);
Attributes.Dispose();
NewGraphics.Dispose();
return NewBitmap;
}
OK c'est le problème ... si je charge une grande image (comme en pixels par exemple) et commencer à déplacer le trackBar après quelques coups il montrera le fameux "Out of memory exeption was unchanded" et l'erreur pointe vers cette ligne
NewGraphics.DrawImage(TempBitmap,
new System.Drawing.Rectangle(0, 0, TempBitmap.Width, TempBitmap.Height), 0, 0,
TempBitmap.Width, TempBitmap.Height, System.Drawing.GraphicsUnit.Pixel,
Attributes);
comme vous pouvez tous le voir je dispose. J'essaie d'utiliser
this.SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint, true);
et réglez le tampon double true Mais rien ne résout le problème peut i incrise la quantité de mémoire que le programme utilisera ou il y a une autre façon de résoudre ce problème.
Si vous lancez un profileur (comme memprofiler), je suis sûr que vous trouverez que vous avez des fuites de poignées/ressources GDI ... –
Non, pourquoi le supprimer? C'est de l'information publique. – GManNickG
merci pour la fixation du poste je l'édite et supprime l'info par erreur. – Bloodsville