'' This code is part of Document Solutions for Imaging samples.
'' 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

'' This sample demonstrates how to swap color channels on an image
'' using pixel access. Here we swap red and blue channels to
'' change the way the image looks.
Public Class SwapColors
    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 bmpSrc = New GcBitmap(Path.Combine("Resources", "ImagesBis", "alpamayo-sq.jpg"))
            '' BitBlt requires the opacity of both images to be the same:
            bmpSrc.Opaque = opaque
            '' Render source image onto the target bitmap
            '' (generally we might want to resize the source image first,
            '' but in this case we just know that the source image has
            '' the same size as the target, so skip this step):
            bmp.BitBlt(bmpSrc, 0, 0)

            Using g = bmp.CreateGraphics()
                For i = 0 To bmp.PixelWidth - 1
                    For j = 0 To bmp.PixelHeight - 1
                        Dim px = bmp(i, j)
                        px = ((px And &HFFUI) << 16) Or ((px And &HFF0000UI) >> 16) Or (px And &HFF00FF00UI)
                        bmp(i, j) = px
                '' Draw the original image in the bottom right corner for reference:
                Dim sx = pixelSize.Width / 3, sy = pixelSize.Height / 3
                g.DrawImage(bmpSrc, New RectangleF(sx * 2, sy * 2, sx, sy), Nothing, ImageAlign.StretchImage)
            End Using
        End Using
        Return bmp
    End Function
End Class