ThresholdingEffects.vb
''
'' This code is part of GrapeCity Documents for Imaging samples.
'' Copyright (c) GrapeCity, Inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports System.Numerics
Imports GrapeCity.Documents.Drawing
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Imaging
'' This sample demonstrates how to use different grayscale effects.
'' See also MatrixEffects1 and MatrixEffects2.
Public Class ThresholdingEffects
Function GenerateImage(
Optional pixelWidth As Integer = 1024,
Optional pixelHeight As Integer = 1024,
Optional opaque As Boolean = True,
Optional dpiX As Single = 96,
Optional dpiY As Single = 96) As GcBitmap
opaque = False
Dim bmp = New GcBitmap(pixelWidth, pixelHeight, opaque, dpiX, dpiY)
Using origBmp = New GcBitmap()
'' Load a sample photo:
Dim imagePath = Path.Combine("Resources", "ImagesBis", "sun.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 = pixelWidth / 2
Dim h = pixelHeight / 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
Dim lineh = 2
'' Keep the pixels in top left quadrant intact,
'' apply effects to the other 3 quadrants
'' (these effects make sense for grayscale images only, so we do it before adding captions):
bmp.ApplyEffect(OtsuThresholdingEffect.Get(), New Rectangle(w + lineh, 0, w - lineh, h - lineh))
bmp.ApplyEffect(BradleyThresholdingEffect.Get(), New Rectangle(0, h + lineh, w - lineh, h - lineh))
bmp.ApplyEffect(BradleyThresholdingEffect.Get(16, 6), New Rectangle(w + lineh, h + lineh, w - lineh, h - lineh))
'' Add borders between the quadrants, And captions for each
Using g = bmp.CreateGraphics(Nothing)
Dim foreColor = Color.Yellow
Dim backColor = Color.Blue
Dim fnt = Font.FromFile(Path.Combine("Resources", "Fonts", "cour.ttf"))
g.DrawLine(w, 0, w, h * 2, New Pen(foreColor, lineh * 2))
g.DrawLine(0, h, w * 2, h, New 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(" OtsuThresholdingEffect ", tf, New PointF(w + lineh, 0))
g.DrawString(" BradleyThresholdingEffect ", tf, New PointF(0, h + lineh))
g.DrawString(" BradleyThresholdingEffect(16,6) ", tf, New PointF(w + lineh, h + lineh))
End Using
End Using
'' Done
Return bmp
End Function
End Class