LEADTOOLS

フレームを表示

LEADとJPEG(JFIF)ファイルフォーマットは、ロードしていて、イメージの保存しているプログレッシブをサポートするために拡張でありえます。プログレッシブ形式は画像転送に便利な形式で、ファイルの最初の部分に画像全体のサイズが含まれています。そのため、画像をロードしながら描画する場合に、まず画像全体を表示してから、ロード処理の進行に従って残りの部分を徐々に鮮明にしていくことができます。

プログレッシブ形式がより新しいため、若干の既存のアプリケーションはサポートしません。したがって、他のアプリケーションで読み込む可能性のある画像を保存する場合は、パスプロパティに設定するパス数に注意する必要があります。

プログレッシブ形式でなく、通常のLEADまたはJPEGファイルとして画像を保存するには、保存メソッドを呼び出す前にCodecsJpegSaveOptionsプロパティを0に設定します。

技術的には、プログレッシブ形式にできるのは4つ以上のパスを持つファイルだけです。フルカラーを低解像度の初回通過に含みます;以降のパスは、解像度を改善します。2つまたは3つのパスを格納するファイルは、マルチスキャンファイルです。最初のパスにはグレースケール情報が含まれ、以降のパスにはカラー情報が含まれます。

このように、プログレッシブファイルを保存する場合、またはプログレッシブファイルの特性を生かして画像をロードする場合は、画像を完成させるために必要なパス数を制御できます。詳細については、「パスプロパティ」を参照してください。

JBIGは、imageのプログレッシブロードもサポートします。これの詳細については、「JBIG機能の実装」を参照してください。

以下のサンプルは、LEAD画像をプログレッシブ形式で保存した後、この画像をロードしながらプログレッシブに描画する方法を示します。

Visual Basic

             Private Sub PaintWhileLoadTest(ByVal fileName As String, ByVal codecs As RasterCodecs, ByVal viewer As RasterImageViewer)
                codecs.Options.Load.Passes = 10
                AddHandler codecs.LoadImage, AddressOf codecs_LoadImage
                codecs.Load(fileName)
                RemoveHandler codecs.LoadImage, AddressOf codecs_LoadImage
             End Sub
            
             Private Sub codecs_LoadImage(ByVal sender As Object, ByVal e As CodecsLoadImageEventArgs)
                If ((e.Flags And CodecsLoadImageFlags.FirstRow) = CodecsLoadImageFlags.FirstRow) Then
                   If (e.ImagePage = 1) Then
                      RasterImageViewer1.Image = e.Image
                      RasterImageViewer1.Image.DisableEvents()
                   End If
                End If
            
                If (e.ImagePage = 1) Then
                   Application.DoEvents()
                   Dim rc As New Rectangle(0, e.Row, RasterImageViewer1.Image.Width, e.Lines)
                   rc = RasterImageViewer1.Image.RectangleFromImage(RasterViewPerspective.TopLeft, rc)
                   Dim transformer As Transformer = New Transformer(RasterImageViewer1.Transform)
                   rc = Rectangle.Round(transformer.RectangleToPhysical(rc))
                   RasterImageViewer1.Invalidate(rc)
                End If
            
                If ((e.Flags And CodecsLoadImageFlags.LastRow) = CodecsLoadImageFlags.LastRow AndAlso e.Page = e.PageCount) Then
                   RasterImageViewer1.Image.EnableEvents()
                End If
             End Sub
             

C#

             private void PaintWhileLoadTest(string fileName, RasterCodecs codecs, RasterImageViewer viewer)
             {
                codecs.Options.Load.Passes = 10;
                EventHandler<CodecsLoadImageEventArgs> handler = new EventHandler<CodecsLoadImageEventArgs>(codecs_LoadImage);
                codecs.LoadImage += handler;
                RasterImage image = codecs.Load(fileName);
                codecs.LoadImage -= handler;
             }
             
             private void codecs_LoadImage(object sender, CodecsLoadImageEventArgs e)
             {
                if((e.Flags & CodecsLoadImageFlags.FirstRow) == CodecsLoadImageFlags.FirstRow)
                {
                   if(e.ImagePage == 1)
                   {
                      rasterImageViewer1.Image = e.Image;
                      rasterImageViewer1.Image.DisableEvents();
                   }
                }
             
                if(e.ImagePage == 1)
                {
                   Application.DoEvents();
                   Rectangle rc = new Rectangle(0, e.Row, rasterImageViewer1.Image.Width, e.Lines);
                   rc = rasterImageViewer1.Image.RectangleFromImage(RasterViewPerspective.TopLeft, rc);
                   Transformer transformer = new Transformer(rasterImageViewer1.Transform);
                   rc = Rectangle.Round(transformer.RectangleToPhysical(rc));
                   rasterImageViewer1.Invalidate(rc);
                }
             
                if((e.Flags & CodecsLoadImageFlags.LastRow) == CodecsLoadImageFlags.LastRow && e.Page == e.PageCount)
                {
                   rasterImageViewer1.Image.EnableEvents();
                }
             }
             
© 1991-2016のLEAD Technologies, Inc. All Rights Reserved.