SHOEISHA iD

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

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

ComponentZine(LEADTOOLS)

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

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

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

表示画像を移動するコントロールボタンの処理

 最後に、4つのボタンのClickイベントハンドラに、RasterImageViewerコントロールで表示する画像ページを移動する処理を作成します。これらの処理はとても簡単です。

 「前のページ」「次のページ」の移動は、Pageプロパティから現在表示されているページ番号を取得し、これを使って再度Pageプロパティに表示するページ番号を作成しセットするだけです。PageCountプロパティを参照すると、読み込んだRasterImageオブジェクトの総ページ数を取得できるため、この値をPageプロパティにセットすれば最後の画像ページを表示します。先頭のページ番号は「1」ですから、これをPageプロパティにセットすれば先頭の画像ページを表示します。

 そして、フォームのClosingイベントハンドラで、Shutdownメソッドをアプリケーションが終了する直前に呼び出し、実行します。

Visual Basic
Private Sub Pagetop_Click(sender As System.Object, e As System.EventArgs) Handles Pagetop.Click
    ' 最初のページに移動します。
    If (RasterImageViewer1.Image.Page <> 1) Then
        RasterImageViewer1.Image.Page = 1
    End If
End Sub

Private Sub BeforePage_Click(sender As System.Object, e As System.EventArgs) Handles BeforePage.Click
    ' 前のページに移動します。
    If (RasterImageViewer1.Image.Page > 1) Then
        RasterImageViewer1.Image.Page = RasterImageViewer1.Image.Page - 1
    End If
End Sub

Private Sub NextPage_Click(sender As System.Object, e As System.EventArgs) Handles NextPage.Click
    ' 次のページに移動します。
    If (RasterImageViewer1.Image.Page < RasterImageViewer1.Image.PageCount) Then
        RasterImageViewer1.Image.Page = RasterImageViewer1.Image.Page + 1
    End If
End Sub

Private Sub LastPage_Click(sender As System.Object, e As System.EventArgs) Handles LastPage.Click
    ' 最後のページに移動します。
    If (RasterImageViewer1.Image.Page <> RasterImageViewer1.Image.PageCount) Then
        RasterImageViewer1.Image.Page = RasterImageViewer1.Image.PageCount
    End If
End Sub

Private Sub Form1_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        RasterCodecs.Shutdown()
    End Sub
C#
private void Pagetop_Click(object sender, EventArgs e)
{
    // 最初のページに移動します。
    if (rasterImageViewer1.Image.Page != 1)
    {
        rasterImageViewer1.Image.Page = 1;
    }       
}

private void BeforePage_Click_1(object sender, EventArgs e)
{
    // 前のページに移動します。
    if (rasterImageViewer1.Image.Page > 1)
    {
        rasterImageViewer1.Image.Page--;
    }
}

private void NextPage_Click_1(object sender, EventArgs e)
{
    // 次のページに移動します。
    if (rasterImageViewer1.Image.Page < rasterImageViewer1.Image.PageCount)
    {
        rasterImageViewer1.Image.Page++;
    }
}

private void LastPage_Click_1(object sender, EventArgs e)
{
    // 最後のページに移動します。
    if (rasterImageViewer1.Image.Page != rasterImageViewer1.Image.PageCount)
    {
        rasterImageViewer1.Image.Page = rasterImageViewer1.Image.PageCount;
    }
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    RasterCodecs.Shutdown();
}
コード全文 Visual Basic
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.WinForms

Public Class Form1
    Private MultiTiff_Fname As String = ""
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        ' 入出力ライブラリの起動に必要なデータを初期化します。
        RasterCodecs.Startup()
    End Sub
    Private Sub 新規作成ToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles 新規作成ToolStripMenuItem.Click
        SaveFileDialog1.Filter = "Tiffファイル(*.tif)| *.tif"
        SaveFileDialog1.FileName = "multi_tiff1.tif"
        If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
            If MessageBox.Show("次のファイル名でマルチTIFFファイルを作成します。" + Environment.NewLine + SaveFileDialog1.FileName, "ファイル作成の確認", _
                               MessageBoxButtons.OKCancel, _
                               MessageBoxIcon.Question) = Windows.Forms.DialogResult.OK Then
                MultiTiff_Fname = SaveFileDialog1.FileName
            Else
                MessageBox.Show("ファイルの作成を中止しました")
            End If
        End If
    End Sub
    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
        If MultiTiff_Fname = "" Then
            MessageBox.Show("保存するTiffファイルがありません。新規に作成してください")
            Exit Sub
        End If
        Dim add_tiff_fname As String = ""
        ' RasterCodecsオブジェクトを初期化します。
        Dim codecs As New RasterCodecs
        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)
            If filecount = 0 Then
                image = page
            Else
                image.AddPage(page)
            End If
            filecount += 1
            codecs.Save(image, MultiTiff_Fname, RasterImageFormat.Tif, 0, 1, -1, 1, CodecsSavePageMode.Overwrite)
            ' ビューワをFitモードに設定します。
            RasterImageViewer1.SizeMode = RasterPaintSizeMode.Fit
            ' この画像を表示します。
            RasterImageViewer1.Image = image
            RasterImageViewer1.Image.Page = image.PageCount
        End If
    End Sub
    Private Sub Pagetop_Click(sender As System.Object, e As System.EventArgs) Handles Pagetop.Click
        ' 最初のページに移動します。
        If (RasterImageViewer1.Image.Page <> 1) Then
            RasterImageViewer1.Image.Page = 1
        End If
    End Sub
    Private Sub BeforePage_Click(sender As System.Object, e As System.EventArgs) Handles BeforePage.Click
        ' 前のページに移動します。
        If (RasterImageViewer1.Image.Page > 1) Then
            RasterImageViewer1.Image.Page = RasterImageViewer1.Image.Page - 1
        End If
    End Sub
    Private Sub NextPage_Click(sender As System.Object, e As System.EventArgs) Handles NextPage.Click
        ' 次のページに移動します。
        If (RasterImageViewer1.Image.Page < RasterImageViewer1.Image.PageCount) Then
            RasterImageViewer1.Image.Page = RasterImageViewer1.Image.Page + 1
        End If
    End Sub
    Private Sub LastPage_Click(sender As System.Object, e As System.EventArgs) Handles LastPage.Click
        ' 最後のページに移動します。
        If (RasterImageViewer1.Image.Page <> RasterImageViewer1.Image.PageCount) Then
            RasterImageViewer1.Image.Page = RasterImageViewer1.Image.PageCount
        End If
    End Sub
    Private Sub Form1_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        RasterCodecs.Shutdown()
    End Sub
End Class
コード全文 C#
using Leadtools;
using Leadtools.Codecs;
using Leadtools.WinForms;
namespace Multi_Tiff_cs
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            // 入出力ライブラリの起動に必要なデータを初期化します。
            RasterCodecs.Startup();
        }
        private String MultiTiff_Fname = "";
        private void 新規作成ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.saveFileDialog1.Filter =  "Tiffファイル(*.tif)| *.tif";
            this.saveFileDialog1.FileName = "multi_tiff1.tif";
            if(this.saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                if(MessageBox.Show("次のファイル名でマルチTIFFファイルを作成します。" + 
                                    Environment.NewLine + saveFileDialog1.FileName, 
                                    "ファイル作成の確認", MessageBoxButtons.OKCancel, 
                                    MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.OK)
                {
                    MultiTiff_Fname = saveFileDialog1.FileName;
                }else
                {
                    MessageBox.Show("ファイルの作成を中止しました");
                }
            }
            
        }
        private int filecount= 0;
        private RasterImage image = null;
        private void tIFFファイルの追加ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if( MultiTiff_Fname == "")
            {
                MessageBox.Show("保存するTiffファイルがありません。新規に作成してください");
                return;
            }
           
            String add_tiff_fname = "";
            
            // RasterCodecsオブジェクトを初期化します。
            RasterCodecs codecs = new RasterCodecs(); 
           
            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);
                if(filecount == 0) 
                {
                    image = page;
                }else
                {
                    image.AddPage(page);
                }
                filecount += 1;
                codecs.Save(image, MultiTiff_Fname, RasterImageFormat.Tif, 0, 1, -1, 1, CodecsSavePageMode.Overwrite);
                // ビューワをFitモードに設定します
                rasterImageViewer1.SizeMode = RasterPaintSizeMode.Fit;
                // この画像を表示します。
                rasterImageViewer1.Image = image;
                rasterImageViewer1.Image.Page = image.PageCount;
            }
        }
        private void Pagetop_Click(object sender, EventArgs e)
        {
            // 最初のページに移動します。
            if (rasterImageViewer1.Image.Page != 1)
            {
                rasterImageViewer1.Image.Page = 1;
            }       
        }
 
        private void BeforePage_Click_1(object sender, EventArgs e)
        {
            // 前のページに移動します。
            if (rasterImageViewer1.Image.Page > 1)
            {
                rasterImageViewer1.Image.Page--;
            }
        }
        private void NextPage_Click_1(object sender, EventArgs e)
        {
            // 次のページに移動します。
            if (rasterImageViewer1.Image.Page < rasterImageViewer1.Image.PageCount)
            {
                rasterImageViewer1.Image.Page++;
            }
        }
        private void LastPage_Click_1(object sender, EventArgs e)
        {
            // 最後のページに移動します。
            if (rasterImageViewer1.Image.Page != rasterImageViewer1.Image.PageCount)
            {
                rasterImageViewer1.Image.Page = rasterImageViewer1.Image.PageCount;
            }
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            RasterCodecs.Shutdown();
        }
    }
}

まとめ

 LEADTOOLS 16.5Jはとても機能が豊富で、1回の記事ではすべてを紹介しきれません。画像にコメントを入れたり、画像処理、スキャニング、アノテーション、OCR(光学式文字認識)機能など、画像を中心にドキュメントを作成する際に必要な、Faxや帳票などのビジネス文書の電子ドキュメント化を支援する幅広い機能を自作のアプリケーションに実装できます。

 今回は、マルチファイルTiffの作成について紹介しました。次回も引き続き、その豊富な機能を生かしたアプリケーション開発を紹介していきたいと思います。

【補足】マルチページTIFFの作成について

 マルチページTIFFの作成自体は、別エディションのImaging Proシリーズでも可能です。ただし、48、64ビットカラー画像、12、16、32ビットグレースケール画像を使用するには、Document Imagingが必要になります。

 詳しい内容を知りたい方は、以下の製品ホームページもご覧ください。

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

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

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング