'' 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.Collections.Generic
Imports System.Linq
Imports System.Numerics
Imports GrapeCity.Documents.Drawing
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Imaging

'' This sample demonstrates how to use GcBitmap.AutoLevel()
'' to automatically adjust the output levels of an image.
Public Class AutoLevels
    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 = True
        Dim bmp = New GcBitmap(pixelWidth, pixelHeight, opaque, dpiX, dpiY)
        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)
            End Using

            '' Resize the original photo to fit two versions on the resulting bitmap:
            Dim w = pixelWidth
            Dim h = pixelHeight / 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:
                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 = Font.FromFile(Path.Combine("Resources", "Fonts", "cour.ttf"))
                g.DrawLine(0, h, w * 2, h, New 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