''
'' 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
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing
'' This sample demonstrates how to use GcBitmap.AutoLevel()
'' to automatically adjust the output levels of an image.
Public Class AutoLevels
Function GenerateImage(
ByVal pixelSize As Size,
ByVal dpi As Single,
ByVal opaque As Boolean,
Optional ByVal sampleParams As String() = Nothing) As GcBitmap
opaque = True
Dim bmp = New GcBitmap(pixelSize.Width, pixelSize.Height, opaque, dpi, dpi)
Using origBmp = New GcBitmap()
'' Load a sample photo:
Dim imagePath = Path.Combine("Resources", "ImagesBis", "red-yellow-wall.jpg")
Using stm = New FileStream(imagePath, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.RandomAccess)
origBmp.Load(stm)
End Using
'' Resize the original photo to fit two versions on the resulting bitmap:
Dim w = pixelSize.Width
Dim h = pixelSize.Height / 2
Using sizedBmp = origBmp.Resize(w, h, InterpolationMode.Cubic)
'' Copy the resized original into the upper half of the resulting bitmap:
bmp.BitBlt(sizedBmp, 0, 0)
'' Auto adjust levels of the original And copy the result into the lower half:
sizedBmp.AutoLevel()
bmp.BitBlt(sizedBmp, 0, h)
End Using
'' Add captions (original And adjusted images):
Dim lineh = 2
Using g = bmp.CreateGraphics(Nothing)
Dim forColor = Color.Yellow
Dim bakColor = Color.Blue
Dim fnt = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "cour.ttf"))
g.DrawLine(0, h, w * 2, h, New GCDRAW.Pen(Color.Gray, lineh * 2))
Dim tf = New TextFormat() With {.Font = fnt, .FontSize = 18, .ForeColor = forColor, .BackColor = bakColor, .FontBold = True}
Dim th = g.MeasureString("QWERTY", tf).Height
g.DrawString(" Original image ", tf, New PointF(0, h - th + lineh))
g.DrawString(" Auto levels applied ", tf, New PointF(0, h * 2 + lineh - th + lineh))
End Using
End Using
Return bmp
End Function
End Class