SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(LEADTOOLS)

複数のTiff画像を1つのファイルに収める.NETアプリケーションの作成

LEADTOOLS 16.5J Document ImagingのRasterImageViewerを使ったアプリケーションの作成

  • X ポスト
  • このエントリーをはてなブックマークに追加

マルチページTIFFファイルへのTIFF画像ファイルの追加処理

 次に、「TIFFファイルの追加」メニューのClickイベントハンドラに、マルチページTIFFファイルへのTIFF画像ファイルの追加処理を作成します。実際のマルチページTIFFファイルの保存は、このイベントハンドラで行われます。処理は次のようになります。

 (1)最初に、マルチページTIFFファイル名が決められているかどうかをチェックし、このファイル名がなければこのイベントハンドラの処理を中止します。

 (2)マルチページTIFFファイル名が決められていれば、TIFF画像ファイルの追加処理を行います。まず、RasterCodecsオブジェクトを初期化します。RasterCodecsクラスは、ラスタ画像ファイルをロードおよび保存するための機能を提供するクラスで、このあといくつかのメソッドを使用するので、ここでこのクラスのインスタンスを作成しておきます。

 (3)OpenFileDialogコントロールのShowメソッドを実行し、追加するTiffファイルを選択してもらいます。ファイル名を取得したら、RasterCodecsクラスのLoadメソッドを実行し、この画像ファイルをロードします。メソッドの引数はTiff画像のファイル名で、読み込んだ画像をRasterImageオブジェクトとして返してきますので、これを変数「page」に格納しておきます。

 (4)追加する画像ファイルが初めてマルチページTIFFファイルに追加される場合は、同じRasterImage型の変数「image」に代入します。追加する画像ファイルが2枚目以降であれば、変数「image」にAddPageメソッドを使って追加します。

 RasterImageクラスは、ピクセルデータによって定義された画像の操作および変換のための作業領域として働き、メモリ内の画像にアクセスしたり、画像の特性を維持したりします。RasterImageクラスは「ISerializable」インタフェースを実装しているため、標準の.NETシリアル化をサポートしており、複数の画像データをページ単位で保持できます。ですので、初めて画像を組み込む場合は単純な代入式で、新しい画像をページとして追加する場合はAddPageメソッドを使用します。

 (5)RasterImageクラスに画像を追加したら、RasterCodecsクラスのSaveメソッドを実行します。このメソッドは、サポートされている任意の圧縮ファイル形式または非圧縮ファイル形式で、RasterImageのページをリモートURLに保存します。メソッドは、次の引数形式のものを使用します。

Saveメソッドの書式
Save(RasterImage,String,RasterImageFormat,Int32,Int32,Int32,Int32,CodecsSavePageMode)
Visual Basic
Public Overloads Sub Save( _
   ByVal image As RasterImage, _
   ByVal fileName As String, _
   ByVal format As RasterImageFormat, _
   ByVal bitsPerPixel As Integer, _
   ByVal firstPage As Integer, _
   ByVal lastPage As Integer, _
   ByVal firstSavePageNumber As Integer, _
   ByVal pageMode As CodecsSavePageMode _
) 
C#
public void Save( 
   RasterImage image,
   string fileName,
   RasterImageFormat format,
   int bitsPerPixel,
   int firstPage,
   int lastPage,
   int firstSavePageNumber,
   CodecsSavePageMode pageMode
)
  • パラメータの内容
    • image

       画像データを含むRasterImageオブジェクト

    • fileName

       出力ファイル名を表すString

    • format

       出力ファイル形式。RasterImageFormat列挙体のメンバを指定。Tiffファイルの場合は「RasterImageFormat.Tif」を指定

    • bitsPerPixel

       出力ファイルのビット数。bitsPerPixelが0の場合は、そのファイル形式でサポートされている最も近いビット数を使用してファイルが保存される

    • firstPage

       imageを保存する最初のページ番号を1から始まるインデックスで指定

    • lastPage

       imageを保存する最後のページ番号を1から始まるインデックスで指定。imageのfirstPageから最後のページまでを保存する場合は-1を指定

    • firstSavePageNumber

       画像ページのどのページを上書きするか、またはどの位置に新しいページを追加するかを1から始まるインデックスで指定

    • pageMode

       マルチページ形式で保存する場合のページの取り扱い方法を以下のいずれかで指定

    説明
    CodecsSavePageMode.Append ファイルの最後に新しいページを追加。ファイルが存在しない場合は、ファイルを作成してページが追加される。firstSavePageNumberは使用されない
    CodecsSavePageMode.Insert firstSavePageNumberで指定したインデックスに新しいページを挿入
    CodecsSavePageMode.Replace firstSavePageNumberで指定したインデックス以降のページを置き換え
    CodecsSavePageMode.Overwrite firstSavePageNumberで指定したインデックス以降のページを上書き
    CodecsSavePageMode.Append ファイルの最後に新しいページを追加。ファイルが存在しない場合は、ファイルを作成してページが追加される

     ここでは、Tiffフォーマットで、画像を追加するたびにすべてのページを上書き保存するようにします。保存したら、RasterImageオブジェクトを廃棄します。

    Visual Basic
    codecs.Save(image, MultiTiff_Fname, RasterImageFormat.Tif, 0, 1, -1, 1, CodecsSavePageMode.Overwrit)
    
    C#
    codecs.Save(image, MultiTiff_Fname, RasterImageFormat.Tif, 0, 1, -1, 1, CodecsSavePageMode.Overwrit)
    

     (6)読み出した画像を、フォームに配置したRasterImageViewerコントロールで表示します。RasterImageViewerコントロールのSizeModeプロパティを使用し、アスペクト比を維持したまま画像をデスティネーション長方形に収めるようにします。プロパティの値はRasterPaintSizeMode列挙体のメンバで、以下の値を使用します。

    メンバ 解説
    Stretch 画像をデスティネーション長方形に合わせる。アスペクト比は維持されない
    FitWidth アスペクト比を維持したまま、画像の幅をデスティネーション長方形の幅に合わせる
    FitAlways 画像のサイズがデスティネーション長方形より小さい場合でも常に、アスペクト比を維持したまま画像をデスティネーション長方形に収める
    Fit アスペクト比を維持したまま、画像をデスティネーション長方形に収めます。画像のサイズがデスティネーション長方形より小さい場合、リサイズは行われない
    Normal サイズ設定しない

     次に、 RasterImageViewerコントロールのImageプロパティに、読み出したRasterImageオブジェクトを設定します。

     そして、最後のページをPageプロパティに設定します。RasterImageViewerコントロールのImageプロパティに設定したRasterImageオブジェクトが複数ページの画像を持っていれば、Pageプロパティを使用してどのページを表示するのかを指定できます。ここでは、ページの総数を表すPageCountプロパティを使用して、最後に追加した画像を表示し無事追加されていることが確認できるようにしています。

    Visual Basic
    Private filecount As Integer = 0
    Private image As RasterImage = Nothing
    
    Private Sub TIFFファイルの追加ToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles TIFFファイルの追加ToolStripMenuItem.Click
    
    (1)If MultiTiff_Fname = "" Then
            MessageBox.Show("保存するTiffファイルがありません。新規に作成してください")
            Exit Sub
            End If
    
         Dim add_tiff_fname As String = ""
    
    (2)’ RasterCodecsオブジェクトを初期化します。
            Dim codecs As New RasterCodecs()
    
    (3)OpenFileDialog1.Filter = "Tiffファイル(*.tif)| *.tif"
            OpenFileDialog1.FileName = "*.tif"
    
           If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
              add_tiff_fname = OpenFileDialog1.FileName
              Dim page As RasterImage = codecs.Load(add_tiff_fname)
    
    (4) If filecount = 0 Then
                  image = page
              Else
                  image.AddPage(page)
              End If
    
              filecount += 1
    
    (5) codecs.Save(image, MultiTiff_Fname, RasterImageFormat.Tif, 0, 1, -1, 1, CodecsSavePageMode.Overwrite)
    
              ' ビューワをFitモードに設定します。
    (6) RasterImageViewer1.SizeMode = RasterPaintSizeMode.Fit
              ' この画像を表示します。
              RasterImageViewer1.Image = image
              RasterImageViewer1.Image.Page = mage.PageCount
        End If
    End Sub
    
    C#
    private int filecount= 0;
    private RasterImage image = null;
    private void tIFFファイルの追加ToolStripMenuItem_Click(object sender, EventArgs e)
    {
    
    (1)if( MultiTiff_Fname == "")
        {
            MessageBox.Show("保存するTiffファイルがありません。新規に作成してください");
            return;
        }
       
            String add_tiff_fname = "";
    
    (2)// RasterCodecsオブジェクトを初期化します。
            RasterCodecs codecs = new RasterCodecs(); 
       
    (3)openFileDialog1.Filter = "Tiffファイル(*.tif)| *.tif";        
            openFileDialog1.FileName = "*.tif";
    
        if(openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            add_tiff_fname = openFileDialog1.FileName;
            RasterImage page= codecs.Load(add_tiff_fname);
    
    (4)if(filecount == 0) 
            {
                image = page;
            }else
            {
                image.AddPage(page);
            }
    
            filecount += 1;
    
    (5)codecs.Save(image, MultiTiff_Fname, RasterImageFormat.Tif, 0, 1, -1, 1, CodecsSavePageMode.Overwrite);
    
         // ビューワをFitモードに設定します
    (6)rasterImageViewer1.SizeMode = RasterPaintSizeMode.Fit;
    
            // この画像を表示します。
            rasterImageViewer1.Image = image;
            rasterImageViewer1.Image.Page = image.PageCount;
        }
    }
    

次のページ
まとめ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
ComponentZine(LEADTOOLS)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6408 2012/02/27 16:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング