All-About調査室 Annex

ふと湧いた疑問や巷を漂うウワサを全部アバウト~に調査・検証
<OCNから漂着 流浪の調査室>

続 VB.netで画像をTiff保存してみる

2017-10-07 11:05:38 | VB.net

前回、カラー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になっており、
(そんなもん付け足した覚えなんかねぇっつうに・・・)
それに対応していないソフトが存在しているからだ。

- つづく -



最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。