'''' This code is part of Document Solutions for Imaging demos.'' Copyright (c) MESCIUS inc. All rights reserved.''Imports System.IOImports System.DrawingImports System.Collections.GenericImports System.LinqImports System.NumericsImports GrapeCity.Documents.DrawingImports GrapeCity.Documents.TextImports GrapeCity.Documents.Imaging
'' This sample loads the image of a goldfish (same as the one used in BmpTransforms)'' and applies different transformations to it, creating a number of frames that'' are combined to produce an animated GIF.Public Class MakeGif Function GenerateImageStream( ByVal targetMime As String, ByVal pixelSize As Size, ByVal dpi As Single, ByVal opaque As Boolean, Optional sampleParams As String() = Nothing) As Stream
If Not targetMime = MimeTypes.GIF Then Throw New Exception("This sample only supports GIF output format.") End If
'' Keep GIF size reasonable: Dim side2 = Math.Min(400, Math.Min(pixelSize.Width, pixelSize.Height))
'' Prepare frames for the target GIF flipping/rotating a single image: Dim move1() As GcBitmap = New GcBitmap(2) {} Dim move2() As GcBitmap = New GcBitmap(3) {} Using bmpSrc = New GcBitmap(Path.Combine("Resources", "Stock", "goldfish.jpg")) bmpSrc.Opaque = opaque '' Adjust straight And flipped images to try And keep the fish's head motionless: Using tbmp = bmpSrc.Resize(side2, side2) move1(0) = New GcBitmap(tbmp.PixelWidth, tbmp.PixelHeight, tbmp.Opaque, tbmp.DpiX, tbmp.DpiY) move1(0).Clear(Color.White) move1(0).BitBlt(tbmp, -CType(side2 / 14.0F, Integer), 0) End Using Using tbmp = move1(0).FlipRotate(FlipRotateAction.FlipHorizontal) move1(1) = New GcBitmap(tbmp.PixelWidth, tbmp.PixelHeight, tbmp.Opaque, tbmp.DpiX, tbmp.DpiY) move1(1).Clear(Color.White) move1(1).BitBlt(tbmp, -CType(side2 / 14.0F, Integer), 0) move1(1).BitBlt(tbmp, 0, 0) End Using move2(0) = move1(0).FlipRotate(FlipRotateAction.Rotate90) move2(1) = move1(0).FlipRotate(FlipRotateAction.Rotate180) move2(2) = move1(0).FlipRotate(FlipRotateAction.Rotate270) End Using '' Combine the moves: Dim bmps = New List(Of GcBitmap)() For i = 0 To 3 bmps.Add(move1(0)) bmps.Add(move1(1)) Next bmps.Add(move1(0)) For i = 0 To 2 bmps.Add(move1(0)) bmps.Add(move2(0)) bmps.Add(move2(1)) bmps.Add(move2(2)) Next bmps.Add(move1(0)) '' Create the GIF: Dim ms = New MemoryStream() Using gw = New GcGifWriter(ms) gw.LogicalScreenWidth = bmps(0).PixelWidth gw.LogicalScreenHeight = bmps(0).PixelHeight gw.PixelAspectRatio = 1 gw.AllowAddingTransparentColor = False
For Each bmp In bmps gw.AppendFrame(bmp, 255, 0, 0, GifDisposalMethod.DoNotDispose, 16) Next End Using '' Dispose bitmaps used to create GIF frames: For Each bmp In bmps.Distinct() bmp.Dispose() Next
ms.Seek(0, SeekOrigin.Begin) Return ms End Function
Public ReadOnly Property DefaultMime() As String Get Return MimeTypes.GIF End Get End PropertyEnd Class