実現したいこと
画像を二値化するプログラムを作成しました。
繰り返して二値化処理をするとメモリーがどんどん増加してしまうため
usingステートメントにてメモリーの開放を試みました。
ところが以下のエラーが出てしまいます。
■エラー内容
System.ArgumentException: '使用されたパラメーターが有効ではありません。
というエラーが表示され、以下の文がハイライトされます。
Application.Run(new Form1());
自分の考えでは以下の文にてpictureBox1.Image を開放しているのが悪さをしているのではないかと考えています。しかし、こうしなければ二値化処理を繰り返すたびにメモリーがどんどん増加してしまうため、どう対処すればよいかわからない状態です。
どなたかご教示願います。
using (image_Clone = new Threshold().Apply(image_Clone))
{
pictureBox1.Image = image_Clone;
}
C#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10using AForge.Imaging.Filters; 11 12namespace Aforge_メモリーリーク 13{ 14 public partial class Form1 : Form 15 { 16 Bitmap image; 17 Bitmap image_Clone; 18 19 public Form1() 20 { 21 InitializeComponent(); 22 } 23 24 private void Form1_Load(object sender, EventArgs e) 25 { 26 27 } 28 29 private void BtnLoad_Click_1(object sender, EventArgs e) 30 { 31 var ofd = new OpenFileDialog(); 32 //ファイルフィルタ 33 ofd.Filter = "Image File(*.bmp,*.jpg,*.png,*.tif)|*.bmp;*.jpg;*.png;*.tif|Bitmap(*.bmp)|*.bmp|Jpeg(*.jpg)|*.jpg|PNG(*.png)|*.png"; 34 //ダイアログの表示 35 if (ofd.ShowDialog() == DialogResult.OK) 36 { 37 image = (Bitmap)Image.FromFile(ofd.FileName); 38 pictureBox1.Image = image; 39 } 40 41 } 42 43 private void BtnStart_Click(object sender, EventArgs e) 44 { 45 //コピーを作成 46 using (image_Clone = (Bitmap)image.Clone()) 47 //グレー化 48 using (image_Clone = new Grayscale(0.2125, 0.7154, 0.0721).Apply(image_Clone)) 49 //二値化 50 using (image_Clone = new Threshold().Apply(image_Clone)) 51 { 52 pictureBox1.Image = image_Clone; 53 } 54 55 } 56 57 } 58}
バージョン
こちらの質問が複数のユーザーから「過去に投稿した質問と同じ内容の質問」という指摘を受けました。
https://teratail.com/questions/aaykzrhr3rytbo ←このスレッドは話はどうした? 過去スレッドで多々回答をもらっていながら放置するような人は相手にされなくなるよ。
お世話になっております。そちら回答しましたのでご確認願います。なかなか解決せず、本気で悩んでいるものになります。どうか知見をお借りできればと思います。
↓ これら全部コメントや回答をもらってるけどあなたは放置・放棄してるのですよ。
https://teratail.com/questions/aaykzrhr3rytbo
https://teratail.com/questions/qqz739zdtofls9
https://teratail.com/questions/496qcybpc4s1s8
https://teratail.com/questions/jw08czzbhwru2j
https://teratail.com/questions/i5wdg8q70tws4x
全部きちんと対応してクローズしてください。話はそれからにしましょう。
過去の質問はすべて解決しましたので感謝をお伝えしクローズいたしました。
よろしくお願いいたします。
相変わらずだなぁ・・・ 昨日 14:14 に YAmaGNZ さんから回答をもらったのに未だに無言。
それから、前のスレッド https://teratail.com/questions/aaykzrhr3rytbo の回答で「だた、質問者さんのオリジナルのコード、追記版のコード、さらに上のように pic も開放するコードのいずれも 1,000 回実行する意味はない(1 回でも結果は同じ)ということは理解されているでしょうか?」と書きましたがその意味を理解してますか? そこを考えて修正するなりしないと、やってることに意味がないのです。