1ファイル複数ページで出来ているTIFFファイルを1ページ毎に
ファイルとして保存したいのですが、やり方が良く判らなかったので
imgedit.ocxで読み込んだTIFFファイルを1ページづつクリップボード経由で
PictureBoxに入れて保存するプログラムを作ってみました。
泥臭いやり方ですが、一応TIFFファイルの分割は出来たものの、元のファイル
に比べて非常にサイズが大きくなってしまい(3ページで60kバイトが1ページで280kバイトになる)、
さらにwindowsについているイメージングでしか表示出来ない形式のファイルに
なってしまって、これでは使い物になりません。
なんとか元と同じ形式のTIFFファイルにしたいのですが、どう修正すれば良いのか
不明で、どなたか判る方いませんか?
プログラムは一連の処理の部分を抜き出したものを以下に書きます。
OSはWindows2000でVB.netを使用しています。
<<<以下が作成したプログラムの抜粋です>>>
'TIFFファイルの読み込み
AxImgEdit1.Image = "aaaaa.tif"
'2ページ目を指定
AxImgEdit1.Page = 2
'TIFFイメージをimgeditに表示
AxImgEdit1.Display()
'クリップボードにコピー
AxImgEdit1.ClipboardCopy(0, 0, AxImgEdit1.ImageScaleWidth, _
AxImgEdit1.ImageScaleHeight)
'クリップボードからピクチャーボックスに貼り付け
Dim d As IDataObject = Clipboard.GetDataObject()
Dim img As Image = CType(d.GetData(DataFormats.Bitmap), Image)
If Not (img Is Nothing) Then
'抜き出したページをPictureBoxに表示
PictureBox1.Image = img
'新しいファイルとして保存
PictureBox1.Image.Save("bbbbb.tif", Imaging.ImageFormat.Tiff)
End If
<<<ここまで>>>
圧縮済みのデータを「無圧縮もしくは圧縮効率が悪いエンコーダ」で
新規ファイルを作成しているからそのようなファルサイズになるのではないでしょうか?
解決方法としては圧縮効率がよいエンコーダを使用しましょう。
PackBits様、有り難う御座います。
圧縮効率の良いエンコーダを使用とのことですが、エンコーダについては良く
判らなかったので、無圧縮になる部分を取り除く事にしました。
結局クリップボードからPictureBoxへ貼り付ける時にBitmapしか受け付け
られなかった為に発生するようなので、別のimgedit部品に対しクリップ
ボードからの貼り付け→ファイル保存とする事で、元の形式でTIFFファイルを
作成する事が出来ました。
どうも有り難う御座いました。
以下、修正した部分のプログラムです。
<<<クリップボードからピクチャーボックスに貼り付け以降>>>
'元の画像と同一サイズでブランクイメージを表示
AxImgEdit2.DisplayBlankImage(AxImgEdit1.ImageScaleWidth, AxImgEdit1.ImageScaleHeight, , , )
'クリップボードから貼り付け
AxImgEdit2.ClipboardPaste()
'新しいファイルとして保存
AxImgEdit2.SaveAs("bbbbb.tif", , , , , )
<<<ここまで>>>
マルチTIFFの各ページを参照するには、
各ページをシングルTIFFファイルに分割するのが、
よい方法です。
しかし、画像の伸張、圧縮の処理をおこうと表示に時間がかかります。
伸張、圧縮をしないソフトとして、小生の DllTiffSplit を
ご紹介します。また、LZWのライセンスは6月に解禁されますが、
DllTiffSplitは画像圧縮アルゴリズムに関係しないので安心して
ご使用いただけます。URLは次の通りです。
http:://homepage3.nifty.com/aylic/
以上
ツイート | ![]() |