.netはあまり好きではないし、苦手である。
とはいえ、コレを使わないと画像表示はままならないし、
複雑な処理を「さくっ」と処理してくれる強力なツールでもあり避けては通れない。
しかしながら、その強力なツールでもある各種のClassの仕様がイマイチわからない。
一所懸命ぐぐっても疑問が解消しないまま、
「動いてんだから良しとするか。プロじゃないんだし・・・」
となることがままある。
(つーか、ほぼ毎回だね、完成確証が持てないのは)
今回、「カラーBMP画像ファイルを読み込んで画面表示し、
それをTiffファイルに保存する」というだけで見事にドロ沼にはまったので
備忘録を兼ねて顛末を紹介しよう。
最初にVB.net(Visual Studio Express 2013)で作ったのが以下。
Imports System.Drawing.Imaging
Public Class Form1
Private PicBox As System.Windows.Forms.PictureBox
Private Sub Form1_Load(sender As Object, e As EventArgs) _
Handles MyBase.Load
' 通常はVSのフォームデザイナでプロパティ指定する
' Form1
Me.Size = New Size(350, 350)
Me.AutoScroll = True
' PictureBox
PicBox = New System.Windows.Forms.PictureBox()
With PicBox
.SizeMode = PictureBoxSizeMode.AutoSize
.Image = System.Drawing.Image.FromFile("E:\Original.bmp")
End With
If PicBox.Image.PixelFormat <> PixelFormat.Format24bppRgb Then
Exit Sub ' RGB24bit Color以外は処理中断
End If
Controls.Add(PicBox)
PicBox.Image.Save("E:\Test1.tif", Imaging.ImageFormat.Tiff)
End Sub
End Class
青文字部分はVSのフォームデザイナを使ってプロパティ指定するので
こんなコード記述はしないのが通常だろう。
読み込んだBMP画像ファイルが24bitカラーかをチェックする部分も
自分で対象ファイルを管理すれば必須ではないので、
(ここを削除すれば、最初の“Imports ・・・”も必要ない)
実質コードは“PicBox.Image.Save・・・”の一文だけで済む。
さっすが、お手軽.net!
・・・なんだけど。
できあがったTiffファイルを正常に表示できないソフトがごくまれに存在する。
なぜ正常表示できない場合があるかというと、
このTiffファイルはLZW圧縮のTiffになっており、
そのLZW圧縮Tiffに対応していないソフトがごくまれに存在するからだ。
ちなみに出来上がったTiffのタグを解析すると以下の記述がある。
(VB.netで作ったTiffは最初のヘッダ以外はファイル後端にタグがある)
0301 0300 01000000 05000000 (バイトオーダーはリトルエンディアン)
0301 : ID#103(16進) Compression Tag 圧縮形式を示す
0300 : Short型データ
01000000 : データ数1個
05000000 : 圧縮形式5番 LZW圧縮方式をあらわす
表示できないのは、大抵は古いフリーソフトで実害はめったにないのだが
(可逆圧縮でファイルサイズが3~4割小さくなるので
むしろ好都合という人もいるだろうけど)
確実に表示できるように非圧縮Tiffにしてみたい。
- つづく -