BlendingModes.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 System.Collections.GenericImports System.LinqImports System.NumericsImports GrapeCity.Documents.DrawingImports GrapeCity.Documents.TextImports GrapeCity.Documents.ImagingImports GCTEXT = GrapeCity.Documents.TextImports GCDRAW = GrapeCity.Documents.Drawing
'' This sample demonstrates composing two images using a few'' of the many available blending modes.'' The base image is a photo of a white orchid on a dark background.'' The blended image is a simple spectrum (thumbnail shown in the bottom right corner).'' See the AllBlendingModes sample for a demo of all available blending modes.Public Class BlendingModes Function GenerateImage( ByVal pixelSize As Size, ByVal dpi As Single, ByVal opaque As Boolean, Optional ByVal sampleParams As String() = Nothing) As GcBitmap
Dim bmp = New GcBitmap(pixelSize.Width, pixelSize.Height, opaque, dpi, dpi) Using origBmp = New GcBitmap(), spectrumBmp = New GcBitmap() '' Load a sample photo: Dim imagePath = Path.Combine("Resources", "ImagesBis", "orchid.jpg") Using stm = New FileStream(imagePath, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.RandomAccess) origBmp.Load(stm) End Using
'' Blending source: Dim spectrumPath = Path.Combine("Resources", "ImagesBis", "spectrum-500x500.png") Using stm = New FileStream(spectrumPath, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.RandomAccess) spectrumBmp.Load(stm) End Using
origBmp.Opaque = opaque spectrumBmp.Opaque = opaque
'' 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), sizedSpectrumBmp = spectrumBmp.Resize(w, h) '' Resized original image: bmp.BitBlt(sizedBmp, 0, 0)
'' Blending mode Color bmp.BitBlt(sizedBmp, w, 0) bmp.CompositeAndBlend(sizedSpectrumBmp, w, 0, CompositeMode.SourceOver, BlendMode.Color)
'' Blending mode SoftLight bmp.BitBlt(sizedBmp, 0, h) bmp.CompositeAndBlend(sizedSpectrumBmp, 0, h, CompositeMode.SourceOver, BlendMode.SoftLight)
'' Blending mode Hue bmp.BitBlt(sizedBmp, w, h) bmp.CompositeAndBlend(sizedSpectrumBmp, w, h, CompositeMode.SourceOver, BlendMode.Hue) End Using '' Show a thumbnail of the blend source in the bottom right corner Using spectrumThumbnail = spectrumBmp.Resize(w / 4, h / 4) bmp.BitBlt(spectrumThumbnail, pixelSize.Width - spectrumThumbnail.PixelWidth, pixelSize.Height - spectrumThumbnail.PixelHeight) End Using '' 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(Color.Gray, lineh * 2)) g.DrawLine(0, h, w * 2, h, New GCDRAW.Pen(Color.Gray, lineh * 2)) Dim tf = New TextFormat() With {.Font = fnt, .FontSize = 18, .ForeColor = foreColor, .BackColor = backColor, .FontBold = True} Dim th = g.MeasureString("QWERTY", tf).Height g.DrawString(" Original image ", tf, New PointF(0, h - th + lineh)) g.DrawString(" BlendMode.Color ", tf, New PointF(w + lineh, h - th + lineh)) g.DrawString(" BlendMode.SoftLight ", tf, New PointF(0, h * 2 + lineh - th + lineh)) g.DrawString(" BlendMode.Hue ", tf, New PointF(w + lineh, h * 2 + lineh - th + lineh)) End Using End Using Return bmp End FunctionEnd Class