Dithering2.vb
C# 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.TextImports GCDRAW = GrapeCity.Documents.Drawing
'' This sample demonstrates how to use dithering methods Stucki, Atkinson, Burkes.'' See also MatrixEffects1 and MatrixEffects2.Public Class Dithering2 Function GenerateImage( ByVal pixelSize As Size, ByVal dpi As Single, ByVal opaque As Boolean, Optional ByVal sampleParams As String() = Nothing) As GcBitmap
opaque = False Dim bmp = New GcBitmap(pixelSize.Width, pixelSize.Height, opaque, dpi, dpi) Using origBmp = New GcBitmap() '' Load a sample photo: Dim imagePath = Path.Combine("Resources", "Stock", "bw-hiking.jpg") Using stm = New FileStream(imagePath, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.RandomAccess) origBmp.Load(stm) End Using
origBmp.SetAlphaTo255() origBmp.Opaque = False
'' Resize the original photo so we can place 4 samples of it '' on the resulting bitmap: Dim w = pixelSize.Width / 2 Dim h = pixelSize.Height / 2 Using sizedBmp = origBmp.Resize(w, h, InterpolationMode.Cubic) '' Copy the resized original into 4 quadrants of the resulting bitmap: bmp.BitBlt(sizedBmp, 0, 0) bmp.BitBlt(sizedBmp, w, 0) bmp.BitBlt(sizedBmp, 0, h) bmp.BitBlt(sizedBmp, w, h) End Using
'' Moving the 3 lines with the "ApplyEffect" comment from below to here '' will apply the effects only to the photos but Not to the texts.
'' Add borders between the quadrants, And captions for each: Dim lineh = 2 Using g = bmp.CreateGraphics(Nothing) Dim foreColor = Color.Yellow Dim backColor = Color.Blue Dim fnt = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FreeMono.ttf")) g.DrawLine(w, 0, w, h * 2, New GCDRAW.Pen(foreColor, lineh * 2)) g.DrawLine(0, h, w * 2, h, New GCDRAW.Pen(foreColor, lineh * 2)) Dim tf = New TextFormat() With {.Font = fnt, .FontSize = 18, .ForeColor = foreColor, .BackColor = backColor, .FontBold = True} g.DrawString(" Original image ", tf, New PointF(0, 0)) g.DrawString(" Stucki ", tf, New PointF(w + lineh, 0)) g.DrawString(" Atkinson ", tf, New PointF(0, h + lineh)) g.DrawString(" Burkes ", tf, New PointF(w + lineh, h + lineh)) End Using '' ApplyEffect (move this code up to before drawing texts '' to limit it to photos only And Not affect the captions). '' '' Keep the pixels in top left quadrant intact, '' apply effects to the other 3 quadrants: bmp.ApplyEffect(DitheringEffect.Get(DitheringMethod.Stucki), New Rectangle(w + lineh, 0, w - lineh, h - lineh)) bmp.ApplyEffect(DitheringEffect.Get(DitheringMethod.Atkinson), New Rectangle(0, h + lineh, w - lineh, h - lineh)) bmp.ApplyEffect(DitheringEffect.Get(DitheringMethod.Burkes), New Rectangle(w + lineh, h + lineh, w - lineh, h - lineh)) End Using '' Done Return bmp End FunctionEnd Class