Magic.NETのGetPixelsを使うとメモリリークする?

.NET Frameworkで「ImageMagck」を使う際に使う「Magic.NET」ですが、読み込んだ画像のピクセル毎の色情報を使いたい時にImageMagick.MagickImage.GetPixels()関数を使うのですが使い方を間違えるとメモリリークします。

このコードは7.0.5.502で確認しました。

問題のコード

//using ImageMagick;
MagickImage Image = new MagickImage("example.bmp");// 適当な初期化処理
using (var Pixels= Image.GetPixels()) {
Pixels.AsParallel().ForAll((pixel) =>
{
var color = pixel.ToColor();
// 色々な処理
});
}

この場合、メモリリークが起きてしまいます。

対策したコード

//using ImageMagick;
MagickImage Image = new MagickImage("example.bmp");// 適当な初期化処理
using (var Pixels= Image.GetPixels())
{ Pixels.AsParallel().ForAll((pixel) =>{ var color = pixel.ToColor();
// 色々な処理 color.Clone();// Closeしないといけない }); }

つまりToColor()で取得したMagicColorをCloseしないといけない訳です。

IDisposableが実装されていないので見落としてましたが、ネイティブライブラリのラッパー故かGCで面倒を見てくれないので注意が必要。