c#.net 4の画像の明るさを変更するには以下の方法を使用しました。明るさの方法で「メモリ不足」例外が表示される
public void SetBrightness(int brightness)
{
imageHandler.RestorePrevious();
if (brightness < -255) brightness = -255;
if (brightness > 255) brightness = 255;
ColorMatrix cMatrix = new ColorMatrix(CurrentColorMatrix.Array);
cMatrix.Matrix40 = cMatrix.Matrix41 = cMatrix.Matrix42 = brightness/255.0F;
imageHandler.ProcessBitmap(cMatrix);
}
internal void ProcessBitmap(ColorMatrix colorMatrix)
{
Bitmap bmap = new Bitmap(_currentBitmap.Width, _currentBitmap.Height)
ImageAttributes imgAttributes = new ImageAttributes();
imgAttributes.SetColorMatrix(colorMatrix);
Graphics g = Graphics.FromImage(bmap);
g.InterpolationMode = InterpolationMode.NearestNeighbor;
g.DrawImage(_currentBitmap, new Rectangle(0, 0, _currentBitmap.Width,
_currentBitmap.Height), 0, 0, _currentBitmap.Width,
_currentBitmap.Height, GraphicsUnit.Pixel, imgAttributes);
_currentBitmap = (Bitmap)bmap.Clone();
}
明るさが数回変更された場合、「メモリ不足」の例外が表示されます。私は "Using block"を使用しようとしましたが、静脈に入りました。
アイデア?
リンク http://www.codeproject.com/Articles/227016/Image-Processing-using-Matrices-in-Csharp を参照し、最適化のいずれかの種類がメソッド(回転、明るさ、作物と元に戻す)で可能であれば提案してください。
あなたは、おそらくビットマップオブジェクトでのDispose()を呼び出すために忘れています。彼らは多くの管理されていないメモリを取る、ガベージコレクタはあなたを困らせないでください。 –