InterpolationModes.vb
C# VB
'''' This code is part of Document Solutions for PDF .NET demos.'' Copyright (c) MESCIUS inc. All rights reserved.''Imports System.IOImports System.DrawingImports GrapeCity.Documents.PdfImports GrapeCity.Documents.TextImports GrapeCity.Documents.DrawingImports GCDRAW = GrapeCity.Documents.Drawing
Public Class InterpolationModes Public Function CreatePDF(ByVal stream As Stream) As Integer ' Small image of a QRCode that will be enlarged in PDFs that are then saved as JPEGs: Using image = GCDRAW.Image.FromFile(Path.Combine("Resources", "ImagesBis", "QRCode-57x57.png")) ' Create 4 PDFs, each is one page on which the small image is enlarged, ' save each PDF as JPEG with different interpolation modes specified in SaveAsImageOptions: Dim tmpNearestNeighbor = Path.GetTempFileName() MakePDF(image, InterpolationMode.NearestNeighbor).SaveAsJpeg(tmpNearestNeighbor, Nothing, New SaveAsImageOptions() With {.InterpolationMode = InterpolationMode.NearestNeighbor}) Dim tmpLinear = Path.GetTempFileName() MakePDF(image, InterpolationMode.Linear).SaveAsJpeg(tmpLinear, Nothing, New SaveAsImageOptions() With {.InterpolationMode = InterpolationMode.Linear}) Dim tmpCubic = Path.GetTempFileName() MakePDF(image, InterpolationMode.Cubic).SaveAsJpeg(tmpCubic, Nothing, New SaveAsImageOptions() With {.InterpolationMode = InterpolationMode.Cubic}) Dim tmpDownscale = Path.GetTempFileName() MakePDF(image, InterpolationMode.Downscale).SaveAsJpeg(tmpDownscale, Nothing, New SaveAsImageOptions() With {.InterpolationMode = InterpolationMode.Downscale})
' Draw each JPEG at its natural size onto a page of the resulting PDF: Dim pageCount As Integer = 0 Using imgNearestNeighbor = GCDRAW.Image.FromFile(tmpNearestNeighbor), imgLinear = GCDRAW.Image.FromFile(tmpLinear), imgCubic = GCDRAW.Image.FromFile(tmpCubic), imgDownscale = GCDRAW.Image.FromFile(tmpDownscale) Dim doc = New GcPdfDocument() Dim page = doc.NewPage() page.Graphics.DrawImage(imgNearestNeighbor, page.Bounds, Nothing, ImageAlign.Default) page = doc.NewPage() page.Graphics.DrawImage(imgLinear, page.Bounds, Nothing, ImageAlign.Default) page = doc.NewPage() page.Graphics.DrawImage(imgCubic, page.Bounds, Nothing, ImageAlign.Default) page = doc.NewPage() page.Graphics.DrawImage(imgDownscale, page.Bounds, Nothing, ImageAlign.Default) ' Save the resulting PDF: doc.Save(stream) pageCount = doc.Pages.Count End Using ' Cleanup: File.Delete(tmpNearestNeighbor) File.Delete(tmpLinear) File.Delete(tmpCubic) File.Delete(tmpDownscale)
'' Done: Return pageCount End Using End Function
' InterpolationMode parameter here is only to show in the resulting PDF, ' GcPdfGraphics only supports InterpolationMode.NearestNeighbor: Public Function MakePDF(ByVal image As GCDRAW.Image, ByVal imode As InterpolationMode) As GcPdfDocument Dim tfCaption = New TextFormat() With { .Font = StandardFonts.Times, .FontSize = 20 } Dim tf = New TextFormat() With { .Font = StandardFonts.Times, .FontSize = 18 }
Dim doc = New GcPdfDocument() Dim page = doc.NewPage() Dim g = page.Graphics
Dim xpad = 36 Dim ypad = 36 Dim ip = New PointF(xpad, ypad) g.DrawString($"SaveAsImageOptions.InterpolationMode is {imode}", tfCaption, ip) ip.Y *= 2.5F
' Draw the original with the original size: g.DrawImage(image, New RectangleF(ip.X, ip.Y, image.Width, image.Height), Nothing, ImageAlign.Default) g.DrawString($"⟵ Original image ({image.Width} by {image.Height} pixels)", tf, New PointF(ip.X * 2 + image.Width, ip.Y)) ip.Y += image.Height + ypad
' Enlarge the original small image by a factor of 8: Dim f = 8 Dim twidth As Integer = image.Width * f Dim theight As Integer = image.Height * f
' Draw the enlarged image: g.DrawImage(image, New RectangleF(ip.X, ip.Y, twidth, theight), Nothing, ImageAlign.StretchImage) g.DrawString($"Image enlarged to {twidth} by {theight} pixels:", tf, New PointF(ip.X, ip.Y - ypad))
Return doc End FunctionEnd Class