LEADTOOLS ナレッジベース

ディザリング処理でJarvis法を使用した場合、行データの先頭付近が黒ドットになる

バッファ方式による画像のディザリング処理でRasterDitheringMethod.Jarvisを指定した場合、RasterImage.DitherLine()で出力される行データの先頭データ付近が黒ドットになる場合があります。

サンプルコード(C#)
RasterImage image;
RasterCodecs codecs = new RasterCodecs();

image = codecs.Load(@"..\..\..\Images\test.jpg");

// パレット画像を新規作成します。
RasterImage destinationImage = new RasterImage(RasterMemoryFlags.Conventional, image.Width, image.Height, 1, image.Order, image.ViewPerspective, null, IntPtr.Zero, 0);
destinationImage.XResolution = image.XResolution;
destinationImage.YResolution = image.YResolution;

// ディザリング方法を設定します。
RasterDitheringMethod method = RasterDitheringMethod.Jarvis;
image.DitheringMethod = method;

// ディザリング処理を初期化します。
image.StartDithering(null, 2);

// 出力バッファを割り当てます。
byte[] InBuffer = new byte[image.BytesPerLine];// 入力行を格納するバッファ
byte[] OutBuffer = new byte[destinationImage.BytesPerLine];// 出力行を格納するバッファ

// DitherLineメソッドを使用して、画像の各ラインを処理します。
for (int i = 0; i < image.Height; i++)
{
  image.GetRow(i, InBuffer, 0, image.BytesPerLine);
  image.DitherLine(InBuffer, 0, OutBuffer, 0);
  destinationImage.SetRow(i, OutBuffer, 0, destinationImage.BytesPerLine);
}
// ディザリング処理を終了します。
image.StopDithering();

codecs.Save(destinationImage, @"..\..\..\Images\result.jpg", RasterImageFormat.Jpeg, 24);


回避方法
本内容はSP3(2017年6月21日リリース)にて修正されました。
サービスパックの適用方法はこちらをご参照ください。

0 コメント

記事コメントは受け付けていません。