C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: TIFF形式の画像読込の例外


(過去ログ 102 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■60793 / inTopicNo.1)  TIFF形式の画像読込の例外
  
□投稿者/ タイムシャワー (1回)-(2011/07/19(Tue) 13:27:26)

分類:[VB.NET/VB2005 以降] 

開発言語:VB2008
開発環境:Windows 7 / Vista
使用環境:Windows XP

TIFF形式のファイルを、以下のようにしてGifファイルに変換しようとしています。

Dim inFile As String  '読み込むファイル(TIFF形式)
Dim outFile As String '保存するファイル(GIF形式)

(途中略)

inFile = System.IO.Path.GetTempFileName()
outFile = System.IO.Path.GetTempFileName()
'処理の都合上、TIFF形式のファイルを一時ファイルにコピー
System.IO.File.Copy(元のTIFF形式ファイル, inFile, True)

Using bmp As New Bitmap(inFile)
   bmp.Save(outFile, Imaging.ImageFormat.Gif)
End Using

(以下略)

ところが、このプログラムをインストールした人から、エラーが発生するとの連絡を受け、ログを確認すると、
どうも、Using bmpのところで「System.ArgumentException: 使用されたパラメータが有効ではありません。」
という例外が発生しているようです。
他にBitmapのインスタンスを作成している箇所がないことと、スタックとレースを見ると、
「場所 System.Drawing.Bitmap..ctor(String filename)」
と記載しているので、Bitmapのインスタンス作成時(TIFF形式ファイル読込時)に例外が発生したものと判断しました。

エラーが出るPCはWindows XP(ノート)なのですが、他のXPマシン(デスクトップ)ではこのエラーが出ないとのことです。
エラーの出るノートPCを借りるわけにいかないので、直接原因を調べるわけにはいかず、原因を探すべく
インターネットでこのような現象を探しましたが、見つからずに困っております。
何かこのエラーの原因として考えられることはあるでしょうか?

引用返信 編集キー/
■60795 / inTopicNo.2)  Re[1]: TIFF形式の画像読込の例外
□投稿者/ 風太郎 (31回)-(2011/07/19(Tue) 13:58:33)
No60793 (タイムシャワー さん) に返信
> 開発言語:VB2008
> 開発環境:Windows 7 / Vista
> 使用環境:Windows XP
>
> TIFF形式のファイルを、以下のようにしてGifファイルに変換しようとしています。
>
> Dim inFile As String '読み込むファイル(TIFF形式)
> Dim outFile As String '保存するファイル(GIF形式)
>
> (途中略)
>
> inFile = System.IO.Path.GetTempFileName()
> outFile = System.IO.Path.GetTempFileName()
> '処理の都合上、TIFF形式のファイルを一時ファイルにコピー
> System.IO.File.Copy(元のTIFF形式ファイル, inFile, True)
>
> Using bmp As New Bitmap(inFile)
> bmp.Save(outFile, Imaging.ImageFormat.Gif)
> End Using
>
> (以下略)
>
> ところが、このプログラムをインストールした人から、エラーが発生するとの連絡を受け、ログを確認すると、
> どうも、Using bmpのところで「System.ArgumentException: 使用されたパラメータが有効ではありません。」
> という例外が発生しているようです。
> 他にBitmapのインスタンスを作成している箇所がないことと、スタックとレースを見ると、
> 「場所 System.Drawing.Bitmap..ctor(String filename)」
> と記載しているので、Bitmapのインスタンス作成時(TIFF形式ファイル読込時)に例外が発生したものと判断しました。
>
> エラーが出るPCはWindows XP(ノート)なのですが、他のXPマシン(デスクトップ)ではこのエラーが出ないとのことです。
> エラーの出るノートPCを借りるわけにいかないので、直接原因を調べるわけにはいかず、原因を探すべく
> インターネットでこのような現象を探しましたが、見つからずに困っております。
> 何かこのエラーの原因として考えられることはあるでしょうか?

ノートの性能が悪くて、ファイルコピーを終了するより先に、アプリケーションの処理が走り
ファイルがないよー!なんてことになっているのでは?

上のコードでは、ファイルが完全にコピーされるまで待機していないように思いましたので。かしこ。
引用返信 編集キー/
■60799 / inTopicNo.3)  Re[2]: TIFF形式の画像読込の例外
□投稿者/ タイムシャワー (2回)-(2011/07/19(Tue) 15:17:45)
No60795 (風太郎 さん) に返信

> ノートの性能が悪くて、ファイルコピーを終了するより先に、アプリケーションの処理が走り
> ファイルがないよー!なんてことになっているのでは?
>
> 上のコードでは、ファイルが完全にコピーされるまで待機していないように思いましたので。かしこ。

風太郎 さん、レスありがとうございます。
ということは、System.IO.File.Copyは非同期で実行されるのでしょうか?
(そういう認識ではなかったのですが)
また、ノートはレッツノートCF-N9のXPダウングレードですので、性能的に劣ることはないと思います。

引用返信 編集キー/
■60804 / inTopicNo.4)  Re[3]: TIFF形式の画像読込の例外
□投稿者/ 風太郎 (33回)-(2011/07/19(Tue) 17:51:05)
No60799 (タイムシャワー さん) に返信
> ■No60795 (風太郎 さん) に返信
>
>>ノートの性能が悪くて、ファイルコピーを終了するより先に、アプリケーションの処理が走り
>>ファイルがないよー!なんてことになっているのでは?
>>
>>上のコードでは、ファイルが完全にコピーされるまで待機していないように思いましたので。かしこ。
>
> 風太郎 さん、レスありがとうございます。
> ということは、System.IO.File.Copyは非同期で実行されるのでしょうか?
> (そういう認識ではなかったのですが)
> また、ノートはレッツノートCF-N9のXPダウングレードですので、性能的に劣ることはないと思います。
>

ぬう。すみませぬ。なんとなくで書いたので・・・

質問の内容に対する、直接の回答ではないのですが、同様の動作をするコードを書いてみました。
*仕様が分かっていないので、さらに的外れするかもですが・・・

特段変わったことをしているわけではありませんが、貴方と違うのは、画像を一度ストリームに読み込んでいる点かなと考えます。

system.io.file.copyの処理が完全に終わっている(システム自体がファイルを掴んでいない状態)で保存の処理が走っているのか
当方では知識不足にて何も申し上げることができないので・・・参考までに以下に書いたコードを載せておきますね。かしこ。

Private Sub Btn_FileSelect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_FileSelect.Click
'オープンファイルダイアログ準備
Dim ofd As New OpenFileDialog
'Tiffファイルのみを対象とする
ofd.Filter = "tiff|*.tif"

'ダイアログを開く
If Not ofd.ShowDialog = Windows.Forms.DialogResult.OK Then Return
'ないとは思うけど、選択したファイルがない場合は、処理中止
If System.IO.File.Exists(ofd.FileName) = False Then Return

'選択したファイル名(フルパス)
Dim String_FilePath As String = ofd.FileName

'保存後のファイル名(フルパス)
Dim String_NewFilePath As String = System.IO.Path.GetDirectoryName(String_FilePath) & "\" & System.IO.Path.GetFileNameWithoutExtension(String_FilePath) & ".gif"

'後処理
ofd.Dispose()
Application.DoEvents()

Dim Stream_FromTiff As System.IO.FileStream = Nothing

Try
'ストリームを作成(読み込みのみで開く)
Stream_FromTiff = New System.IO.FileStream(String_FilePath, IO.FileMode.Open, IO.FileAccess.Read)

'画像の検証無しでイメージへ変換
Dim Image_ToSave As Image = Image.FromStream(Stream_FromTiff, False, False)

'Gif形式で保存する
Image_ToSave.Save(String_NewFilePath, System.Drawing.Imaging.ImageFormat.Gif)
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
If Stream_FromTiff IsNot Nothing Then Stream_FromTiff.Dispose()
End Try
End Sub

引用返信 編集キー/
■60813 / inTopicNo.5)  Re[3]: TIFF形式の画像読込の例外
□投稿者/ Azulean (790回)-(2011/07/19(Tue) 22:51:30)
No60799 (タイムシャワー さん) に返信
> ということは、System.IO.File.Copyは非同期で実行されるのでしょうか?

実動作を再確認はしていませんが、以下のページによると同期処理とされています。
http://code.msdn.microsoft.com/C-4c3661a8


さて、改めて問題はどこにあるのか考え直してみましょう。

・問題の起きる環境で読み込んでいる TIFF ファイルは本当に TIFF ファイルか?また、.NET(GDI+) で読み込める TIFF ファイルか?
 →その TIFF ファイルをもらって他の環境でも読み込んでみる。(壊れている TIFF or 対応していない TIFF の可能性)

・GetTempFileName で得られるパスにコピーしなかった場合は、読み込めるのか?
 →直接の場合に読み込めるなら、ファイルコピーに何か問題があるかも。(心当たりはありませんが)

・ファイルは正しいことが確認できて、その環境で直接読み込んだ場合も失敗する。
 →いよいよ環境依存の何かが疑われる。(心当たりはありませんが)

たとえば、上に挙げたような切り分けは済んでいますか?
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -