前回、カラーBMP画像ファイルを読み込んで画面表示し、
それをTiffファイルに保存するプログラムをVB.netで「さくっ」と作ったら
できたTiffファイルはLZW圧縮形式のものになった。
今回非圧縮Tiffで保存するようにプログラムしなおしたら
これまた想定外のTiffファイルとなってしまった。
以下が今回作ったプログラムで、
Bitmapクラスを使って非圧縮オプション指定している。
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 ' 24bit Color以外は処理中断
End If
Controls.Add(PicBox)
Dim PicBmp As New Bitmap(PicBox.Image)
Dim IC_Info As ImageCodecInfo = Nothing
Dim Using_EncP As EncoderParameters
' Tiffエンコーダを探す(あるはずなので見つからない場合の処理は割愛)
Dim N As Integer
Dim encoders() As ImageCodecInfo
encoders = ImageCodecInfo.GetImageEncoders()
For N = 0 To encoders.Length – 1
If encoders(N).FormatID = ImageFormat.Tiff.Guid Then
IC_Info = encoders(N)
Exit For
End If
Next
Using_EncP = New EncoderParameters(1)
Using_EncP.Param(0) = New EncoderParameter( _
Encoder.Compression, EncoderValue.CompressionNone)
' 圧縮無しオプション指定
PicBmp.Save("E:\Test2.tif", IC_Info, Using_EncP)
PicBmp.Dispose() ' bmp使用終了
End Sub
End Class
前回同様に青文字部分はフォームデザイナで指定すればコード記述は不要になるが、
非圧縮オプション指定するだけでかなり長く、複雑になった。
(なんだかなぁ・・・)
これでデータ非圧縮のTiffファイルができた・・・のだが、
相変わらず正常に表示できないソフトが存在する。
表示できない理由は、今度のTiffファイルはRGB24bitではなく
αチャンネル(透過度を表現する)8bitが付加された32bitARGBになっており、
(そんなもん付け足した覚えなんかねぇっつうに・・・)
それに対応していないソフトが存在しているからだ。
- つづく -