ExtractFrames.vb
- ''
- '' This code is part of Document Solutions for Imaging demos.
- '' Copyright (c) MESCIUS inc. All rights reserved.
- ''
- Imports System.IO
- Imports System.Drawing
- Imports System.Collections.Generic
- Imports System.Linq
- Imports System.Numerics
- Imports GrapeCity.Documents.Drawing
- Imports GrapeCity.Documents.Text
- Imports GrapeCity.Documents.Imaging
- Imports GCTEXT = GrapeCity.Documents.Text
- Imports GCDRAW = GrapeCity.Documents.Drawing
-
- '' This sample shows how to extract frames from a TIFF image,
- '' and how to read them as GcBitmap instances.
- Public Class ExtractFrames
- Function GenerateImage(
- ByVal pixelSize As Size,
- ByVal dpi As Single,
- ByVal opaque As Boolean,
- Optional ByVal sampleParams As String() = Nothing) As GcBitmap
-
- '' Create the resulting image:
- Dim bmp = New GcBitmap(pixelSize.Width, pixelSize.Height, opaque, dpi, dpi)
-
- '' If there is a possibility that we will not fill some areas of the target bitmap
- '' (as in this case where the number of frames in the TIFF may be less than 4),
- '' we MUST clear the resulting bitmap as GcBitmap ctor does NOT clear the memory
- '' allocated for the pixels (to save time, as initializing large bitmaps may be
- '' very slow):
- bmp.Clear()
-
- '' Sample TIFF image path:
- Dim imagePath = Path.Combine("Resources", "ImagesBis", "BmpWriteTiff3.tiff")
-
- '' List to hold bitmaps for the TIFF frames:
- Dim frameBmps(0) As GcBitmap
-
- '' Read all frames from the TIFF file:
- Using stm = New FileStream(imagePath, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.RandomAccess)
- Using tr = New GcTiffReader(stm)
- ReDim frameBmps(tr.Frames.Count - 1)
- For i = 0 To tr.Frames.Count - 1
- frameBmps(i) = tr.Frames(i).ToGcBitmap()
- frameBmps(i).Opaque = opaque
- Next
- End Using
- End Using
-
- '' Resize and render the frames' bitmaps into the resulting image:
- Dim w = pixelSize.Width / 2
- Dim h = pixelSize.Height / 2
- If frameBmps.Length > 0 Then
- Using tbmp = frameBmps(0).Resize(w, h)
- bmp.BitBlt(tbmp, 0, 0)
- End Using
- End If
- If frameBmps.Length > 1 Then
- Using tbmp = frameBmps(1).Resize(w, h)
- bmp.BitBlt(tbmp, w, 0)
- End Using
- End If
- If frameBmps.Length > 2 Then
- Using tbmp = frameBmps(2).Resize(w, h)
- bmp.BitBlt(tbmp, 0, h)
- End Using
- End If
- If frameBmps.Length > 3 Then
- Using tbmp = frameBmps(3).Resize(w, h)
- bmp.BitBlt(tbmp, w, h)
- End Using
- End If
-
- '' Dispose the frame bitmaps:
- For Each tbmp In frameBmps
- tbmp.Dispose()
- Next
-
- '' Add borders between the quadrants, and captions for each:
- Using g = bmp.CreateGraphics()
- Dim foreColor = Color.Yellow
- Dim backColor = Color.Blue
- Dim fnt = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "cour.ttf"))
- Dim lineh = 2
- g.DrawLine(w, 0, w, h * 2, New GCDRAW.Pen(Color.Gray, lineh * 2))
- g.DrawLine(0, h, w * 2, h, New GCDRAW.Pen(Color.Gray, lineh * 2))
- Dim tf = New TextFormat() With {.Font = fnt, .FontSize = 18, .ForeColor = foreColor, .BackColor = backColor, .FontBold = True}
- Dim th = g.MeasureString("QWERTY", tf).Height
- If frameBmps.Length > 0 Then
- g.DrawString(" Frame 0 ", tf, New PointF(0, h - th + lineh))
- End If
- If frameBmps.Length > 1 Then
- g.DrawString(" Frame 1 ", tf, New PointF(w + lineh, h - th + lineh))
- End If
- If frameBmps.Length > 2 Then
- g.DrawString(" Frame 2 ", tf, New PointF(0, h * 2 + lineh - th + lineh))
- End If
- If frameBmps.Length > 3 Then
- g.DrawString(" Frame 3 ", tf, New PointF(w + lineh, h * 2 + lineh - th + lineh))
- End If
- End Using
-
- Return bmp
- End Function
- End Class
-
-