DOBON.NETプログラミング道掲示板
(現在 過去ログ5 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■34879 / inTopicNo.1)  マルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する
  
□投稿者/ tomy 一般人(11回)-(2021/08/23(Mon) 15:07:37)
  • アイコン環境/言語:[Windows7/C#/VisualStudio2015/.Net Framework4.5] 
    分類:[.NET] 

    2021/08/23(Mon) 19:05:30 編集(投稿者)
    2021/08/23(Mon) 19:05:18 編集(投稿者)

    現在、マルチページTIFFを読み込んで、個別のイメージにバラしたり、各ページを指定して取り出したりできるようなアプリを作成中です。

    サイズが小さいファイルなら問題ないのですが、モノクロ、カラー、グレースケールが混在した9ページのファイル(41MB程度)を読み込むと、4ページ目を表示したときにエラーが発生します。

    読み込み時は単純にImage

    img = System.Drawing.Bitmap.FromFile(filename);
    dimension = new System.Drawing.Imaging.FrameDimension(img.FrameDimensionsList[0]);
    pictureBox1.Image = img;

    としており、ボタンを押すとページを+1して画面に表示しています。

    dispPageNo++;
    img.SelectActiveFrame(dimension, dispPageNo);
    pictureBox1.Image = img;

    最初の3ページは正常に表示できますが、4ページ目になると
    「GDI+ で汎用エラーが発生しました。」
    というエラーが発生してしまいます。

    試しに、サイズの小さなマルチページTIFF(カラー、9ページ、82KB)を作って試してみたらエラーになりませんでした。

    なんとか回避する方法はないものでしょうか・・・。


引用返信 削除キー/
■34880 / inTopicNo.2)  Re[1]: マルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する
□投稿者/ 魔界の仮面弁士 大御所(1390回)-(2021/08/23(Mon) 15:36:25)
  • アイコンNo34879に返信(tomyさんの記事)
    > サイズが小さいファイルなら問題ないのですが、モノクロ、カラー、グレースケールが混在した9ページのファイル(41MB程度)を読み込むと、4ページ目を表示したときにエラーが発生します。

    元の TIFF が Dispose されていませんか? (あるいはガベージコレクト)


    > img = System.Drawing.Bitmap.FromFile(filename);
    この img がローカル変数になっている場合は、
    フィールド変数に引き上げてみてください。

    ファイルを開き続けておくことが要件的に難しい場合には、
    元ファイルのバイナリを MemoryStream に読み込んでおき、
    それを Image.FromStream するようにします。
    (元となった MemoryStream はフィールド変数として保持し続ける必要があります)
引用返信 削除キー/
■34881 / inTopicNo.3)  Re[1]: マルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する
□投稿者/ tomy 一般人(12回)-(2021/08/23(Mon) 15:36:30)
  • アイコン1点追記です。
    ちょっとだけ条件が分かりました。

    カラーのみ、2値のみではエラーになりません。
    カラーと2値が混在しているとき、2値を表示した後におかしくなるようです。

    カラー、カラー、2値、カラー

    となっている場合、3ページ目の2値は表示できますが、そのあと4ページ目のカラーを表示しようとすると真っ黒になったり、エラーになったりします。

    .Netの不具合っぽい気がしてきました。
    どうしようもないのかな・・・。



引用返信 削除キー/
■34882 / inTopicNo.4)  Re[2]: マルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する
□投稿者/ tomy 一般人(13回)-(2021/08/23(Mon) 15:42:26)
  • アイコン
    ・魔界の仮面弁士さんへ

    ありがとうございます。

    >>img = System.Drawing.Bitmap.FromFile(filename);
    > この img がローカル変数になっている場合は、
    > フィールド変数に引き上げてみてください。

    imgはフィールド変数になっています。

    先ほど追記したのですが、入れ違いになってしまいました。

    カラー、カラー、2値、カラー

    というふうに、カラーと2値が混在しているとき、2値を表示したあとカラーを表示するとおかしくなるようです。
    この場合、1枚目から順に表示していって、3枚目が2値、4枚目を表示するとエラーになったり真っ黒の絵になったりします。

    なお、カラーはLZW、2値はFAX Group4で圧縮しています。

    .Netのバグかな・・・。

引用返信 削除キー/
■34883 / inTopicNo.5)  Re[2]: マルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する
□投稿者/ 魔界の仮面弁士 大御所(1391回)-(2021/08/23(Mon) 15:44:11)
  • アイコンNo34880に追記(魔界の仮面弁士の記事)
    > 元の TIFF が Dispose されていませんか? (あるいはガベージコレクト)

    以下、参考までに。 C# ではなく VB 向けの話題ですが。
    http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=30504
引用返信 削除キー/
■34884 / inTopicNo.6)  Re[3]: マルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する
□投稿者/ tomy 一般人(14回)-(2021/08/23(Mon) 16:41:17)
  • アイコン魔界の仮面弁士さん
    ありがとうございます。

    ご指摘いただいた内容も考慮して、MemoryStreamにしてみたりしましたが、やはりダメです・・・。

    やってみたことは、

    MemoryStreamをフィールド変数とする。
    ファイルから読み込んだTIFFのデータをMemoryStreamに格納する。
    ImageにはFromStreamで読み込む。

    TIFFファイルは、前から順番に

    カラー、カラー、2値、カラー

    と、カラーと2値が混在しているファイル。

    この条件ですと、やはり4ページ目(ようするに2値を表示したあとのカラーを表示しようとしたところで)でエラーが発生します。

    全てのページがカラー、すべてのページが2値の場合では問題ないため、カラーと2値が混在するときのみの問題だと考えています。


引用返信 削除キー/
■34885 / inTopicNo.7)  Re[4]: マルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する
□投稿者/ 魔界の仮面弁士 大御所(1392回)-(2021/08/23(Mon) 17:10:32)
  • アイコンNo34884に返信(tomyさんの記事)
    > TIFFファイルは、前から順番に
    > カラー、カラー、2値、カラー
    > と、カラーと2値が混在しているファイル。

    現象を再現させることのできる画像ファイルを提示できますか?

    41MB だと、この掲示板の添付上限を超えてしまうので
    OneDrive の公開フォルダー等の URL でご提示頂けると助かります。
引用返信 削除キー/
■34886 / inTopicNo.8)  Re[5]: マルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する
□投稿者/ tomy 一般人(15回)-(2021/08/23(Mon) 17:20:33)
  • アイコン
    > 現象を再現させることのできる画像ファイルを提示できますか?

    ファイルを添付します。

    グレー、グレー、2値、グレー

    でも同様でしたので、グレーと2値の混在ファイルを作成しました。
    なお、このファイルではエラーにはならなくて、4枚目の画像が黒くなってしまいます(正しく表示できない)

    Windowsのフォトビューアーなどでは正常に表示できます。

    また、色々テストした結果、

    カラーおよびグレーの圧縮形式は問わない。
    2値がFAX Group3またはFAX Group4のときに現象が再現する。
    2値がPackbits、無圧縮のときは再現しない。

    ようです。


イメージ
1629706833.zip
/16KB
引用返信 削除キー/
■34887 / inTopicNo.9)  Re[6]: マルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する
□投稿者/ 魔界の仮面弁士 大御所(1393回)-(2021/08/23(Mon) 18:00:19)
  • アイコンNo34886に返信(tomyさんの記事)
    > ファイルを添付します。

    下記のコードで実験しましたが、特に問題は発生しませんでした。

    private System.IO.MemoryStream ms = null;
    private Bitmap bmp = null;
    private int maxPage = 0;
    private int currentPage = 0;
    private void Form1_Load(object sender, EventArgs e)
    {
      string filePath = @"C:\test\MultiTiff_グレー2値混在.tif";
      this.bmp = new Bitmap(this.ms = new System.IO.MemoryStream(System.IO.File.ReadAllBytes(filePath)));
      this.maxPage = bmp.GetFrameCount(FrameDimension.Page);
      this.pictureBox1.Image = this.bmp;
      this.currentPage = 1;
      this.button1.Text = currentPage + "/" + this.maxPage;
    }

    private void button1_Click(object sender, EventArgs e)
    {
      if (this.currentPage == this.maxPage)
      {
        this.currentPage = 1;
      }
      else
      {
        this.currentPage++;
      }
      this.bmp.SelectActiveFrame(FrameDimension.Page, currentPage - 1);
      this.button1.Text = this.currentPage + "/" + this.maxPage;
      this.pictureBox1.Invalidate();
    }
引用返信 削除キー/
■34888 / inTopicNo.10)  Re[7]: マルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する
□投稿者/ tomy 一般人(16回)-(2021/08/23(Mon) 19:02:13)
  • アイコンソースをコピペのうえ、
    using System.Drawing.Imaging;
    を追加して、ファイルの場所だけ変更して実行しましたが、やはりおかしくなってしまいます。
    環境の差でしょうか・・・。

    ちょっと気になったのでVisual Studio 2017、Visual Studio 2019で同じソースにて実験してみたら正常に動きました。
    Visual Studio 2015ではダメなのかもしれません。

673×526 => 250×195
イメージ
MultiTiffError.png
/9KB
引用返信 削除キー/
■34889 / inTopicNo.11)  Re[7]: マルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する
□投稿者/ tomy 一般人(17回)-(2021/08/23(Mon) 19:08:42)
  • アイコン申し訳ありません。
    最初に書いたOSが間違っていました。
    Windows7でした。
    最初Windows10と書いておりました。

    Windows 10上のVisualStudio2017で作成し、正常に動くことを確認したEXEをWindows7にもっていって実行するとおかしくなりました。

    逆に、Windows7 VisualStudio2015で作成し、正常に動かないEXEをWindows10上で実行すると正常に動きます。

    このことから、Windows7が問題ではないかと思われます。

引用返信 削除キー/
■34890 / inTopicNo.12)  Re[8]: マルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する
□投稿者/ 魔界の仮面弁士 大御所(1394回)-(2021/08/23(Mon) 19:56:47)
  • アイコンNo34889に返信(tomyさんの記事)
    > このことから、Windows7が問題ではないかと思われます。

    .NET Framework の問題ではなく、
    Windows 7 の Windows Imaging Component に問題があるのかもしれませんね。

    https://social.msdn.microsoft.com/Forums/en-US/6cfab893-467d-4116-aba0-31eb98c0c899/imagefromfile-strange-side-effect-with-tif-images-in-win7?forum=netfxbcl


    現行 OS では無いので(Win7 は 2020/01/14 でサポート期限切れ)、
    今となっては、もはや気にしなくても良いのかも。
引用返信 削除キー/
■34891 / inTopicNo.13)  Re[9]: マルチページTIFFをSelectActiveFrameでページ指定するとエラーが発生する
□投稿者/ tomy 一般人(18回)-(2021/08/23(Mon) 20:11:00)
  • アイコン> .NET Framework の問題ではなく、
    > Windows 7 の Windows Imaging Component に問題があるのかもしれませんね。
    >
    > https://social.msdn.microsoft.com/Forums/en-US/6cfab893-467d-4116-aba0-31eb98c0c899/imagefromfile-strange-side-effect-with-tif-images-in-win7?forum=netfxbcl

    やっぱり、そうなんでしょうね・・・
    ご提示いただいたリンクはあとで確認します。


    > 現行 OS では無いので(Win7 は 2020/01/14 でサポート期限切れ)、
    > 今となっては、もはや気にしなくても良いのかも。

    本来はそうなんですが・・・
    まだ過去に納品したお客さんのところでWindows7が残っているかもしれず、もしかすると対応を要求されるかも・・・。

    ただ、まあ、今回に限って言えばWindows7上で動かすことはなさそうなので、必要が生じたときになんとかしますという事で勘弁していただけないか相談してみます。

    色々ありがとうございました。

    最新OSでは動く、という事がわかりましたので、ひとまず解決とさせていただきます。




解決み!
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -