EnlargeImage.vb
'''' This code is part of Document Solutions for Imaging demos.'' Copyright (c) MESCIUS inc. All rights reserved.''Imports System.IOImports System.DrawingImports GrapeCity.Documents.DrawingImports GrapeCity.Documents.TextImports GrapeCity.Documents.ImagingImports GCTEXT = GrapeCity.Documents.Text
'' This sample shows how to enlarge a loaded image'' using different interpolation modes.Public Class EnlargeImage Function GenerateImage( ByVal pixelSize As Size, ByVal dpi As Single, ByVal opaque As Boolean, Optional ByVal sampleParams As String() = Nothing) As GcBitmap
Dim origImagePath = Path.Combine("Resources", "Stock", "woman-window-small.jpg") '' Create and clear the target bitmap: Dim targetBmp = New GcBitmap(pixelSize.Width, pixelSize.Height, True, dpi, dpi) targetBmp.Clear(Color.Transparent)
Const fontSize = 16, fpad = 4, xpad = 4, ypad = 3 Dim tf = New TextFormat With { .Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FreeSerif.ttf")), .FontSize = fontSize } Using origBmp = New GcBitmap() Using stm = New FileStream(origImagePath, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.RandomAccess) origBmp.Load(stm) End Using
'' Draw the original with the original size: targetBmp.BitBlt(origBmp, 0, 0) Using g = targetBmp.CreateGraphics(Nothing) g.DrawString($"⟵ Original image ({origBmp.Width} by {origBmp.Height} pixels)", tf, New PointF(origBmp.Width + fpad, fpad)) End Using Dim dy = origBmp.Height + ypad
'' Enlarge image so that we can have 4 enlarged tiled images preserving aspect ratio: Dim f = Math.Min( (targetBmp.Width - xpad) / origBmp.Width / 2, (targetBmp.Height - ypad - dy) / origBmp.Height / 2) Dim twidth = (origBmp.Width * f) Dim theight = (origBmp.Height * f)
'' Dim drawCaption As Action(Of String, Single, Single) = Sub(caption, x, y) Using g = targetBmp.CreateGraphics(Nothing) g.DrawString(caption, tf, New RectangleF(x + fpad, y + theight - fontSize - fpad * 2, twidth - fpad * 2, fontSize + fpad * 2)) End Using End Sub
'' Enlarge and draw 4 copies using the 4 available interpolation modes: Using bmp = origBmp.Resize(twidth, theight, InterpolationMode.NearestNeighbor) targetBmp.BitBlt(bmp, 0, dy) End Using drawCaption("InterpolationMode.NearestNeighbor", 0, dy)
Using bmp = origBmp.Resize(twidth, theight, InterpolationMode.Linear) targetBmp.BitBlt(bmp, 0, dy + theight + ypad) End Using drawCaption("InterpolationMode.Linear", 0, dy + theight + ypad)
Using bmp = origBmp.Resize(twidth, theight, InterpolationMode.Cubic) targetBmp.BitBlt(bmp, twidth + xpad, dy) End Using drawCaption("InterpolationMode.Cubic", twidth + xpad, dy)
Using bmp = origBmp.Resize(twidth, theight, InterpolationMode.Downscale) targetBmp.BitBlt(bmp, twidth + xpad, dy + theight + ypad) End Using drawCaption("InterpolationMode.Downscale", twidth + xpad, dy + theight + ypad) '' End Using Return targetBmp End FunctionEnd Class