''
'' 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
'' This sample loads an existing GIF and modifies its frames.
'' Specifically, it applies a color matrix to change the colors,
'' and flips the images horizontally.
'' The GIF loaded in this sample is the one produced by IndexedGif.
Public Class UpdateGif
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
'' Matrix to change colors to greenish blues:
Dim colorMatrix = New ColorMatrix5x4() With
{
.M11 = 0.2F,
.M12 = 0.3F,
.M22 = 0.5F
}
Dim ms = New MemoryStream()
'' Read source GIF, write modified one (change palette And flip And rotate frames)
Using gr = New GcGifReader(Path.Combine("Resources", "Gifs", "goldfish-indexed.gif")), gw = New GcGifWriter(ms)
Dim pal = gr.GetGlobalPalette()
'' This sample will only work with GIFs that have a global palette
If pal Is Nothing Then
Throw New Exception("Source GIF does not have a global palette.")
End If
'' Use color matrix to update the palette
Using palBmp = New GcBitmap(pal, pal.Length, 1, True)
palBmp.ApplyColorMatrix(colorMatrix)
End Using
'' Set target paletter And other properties
gw.GlobalPalette = pal
gw.LogicalScreenWidth = gr.LogicalScreenWidth
gw.LogicalScreenHeight = gr.LogicalScreenHeight
gw.PixelAspectRatio = gr.PixelAspectRatio
gw.AllowAddingTransparentColor = False
Using tbmp = New GcBitmap()
For i = 0 To gr.Frames.Count - 1
Dim frame = gr.Frames(i)
frame.ToGcBitmap(tbmp, i - 1)
'' Flip the image horizontally (this will reverse the 'rotation' of the fish):
Using bmp = tbmp.FlipRotate(FlipRotateAction.FlipHorizontal)
'' Apply the color matrix And append the frame to the target GIF:
bmp.ApplyColorMatrix(colorMatrix)
gw.AppendFrame(bmp, pal, DitheringMethod.NoDithering, 0, 0, GifDisposalMethod.DoNotDispose, frame.DelayTime, False)
End Using
Next
End Using
End Using
ms.Seek(0, SeekOrigin.Begin)
Return ms
End Function
Public ReadOnly Property DefaultMime() As String
Get
Return MimeTypes.GIF
End Get
End Property
End Class