diff --git a/app/DD-Record-Organiser/ClassBackgroundHelper.vb b/app/DD-Record-Organiser/ClassBackgroundHelper.vb new file mode 100644 index 0000000..ec18a09 --- /dev/null +++ b/app/DD-Record-Organiser/ClassBackgroundHelper.vb @@ -0,0 +1,127 @@ +Imports System.Collections.Generic +Imports System.Linq +Imports System.Text +Imports System.Drawing +Imports System.Drawing.Imaging +Imports DevExpress.XtraGrid.Views.Base +Imports DevExpress.XtraGrid.Blending +Imports DevExpress.XtraGrid +Imports DevExpress.XtraGrid.Views.Grid +Imports DevExpress.XtraGrid.Views.Grid.ViewInfo + +Public Class ClassBackgroundHelper + Private _blendingComponent As XtraGridBlending + Private _originalImage As Bitmap + Private _grid As GridView + Private _pictureAlignment As ContentAlignment + + Public Property Image() As Bitmap + Get + Return _originalImage + End Get + Set(value As Bitmap) + _originalImage = value + GenerateBackgroundImage() + End Set + End Property + Public Property PictureAlignment() As ContentAlignment + Get + Return _pictureAlignment + End Get + Set(value As ContentAlignment) + _pictureAlignment = value + GenerateBackgroundImage() + End Set + End Property + Public Sub New(grid As GridView, image As Bitmap, Optional alignment As ContentAlignment = ContentAlignment.BottomRight) + _grid = grid + InitializingBlendingComponent() + _originalImage = image + _grid.GridControl.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center + PictureAlignment = alignment + + AddHandler _grid.GridControl.Resize, AddressOf GridControl_Resize + GenerateBackgroundImage() + End Sub + + Private Sub GridControl_Resize(sender As Object, e As EventArgs) + GenerateBackgroundImage() + End Sub + + Public Shared Function SetImgageOpacity(ByVal imgPic As Image, ByVal imgOpac As Double) As Image + + Dim bmpPic As New Bitmap(imgPic.Width, imgPic.Height) + Dim gfxPic As Graphics = Graphics.FromImage(bmpPic) + Dim cmxPic As New ColorMatrix() + Dim iaPic As New ImageAttributes() + + cmxPic.Matrix33 = imgOpac + + iaPic.SetColorMatrix(cmxPic, ColorMatrixFlag.[Default], ColorAdjustType.Bitmap) + gfxPic.DrawImage(imgPic, New Rectangle(0, 0, bmpPic.Width, bmpPic.Height), 0, 0, imgPic.Width, imgPic.Height, GraphicsUnit.Pixel, iaPic) + + gfxPic.Dispose() + iaPic.Dispose() + + Return bmpPic + + End Function + + Private Sub GenerateBackgroundImage() + Dim gvInfo As GridViewInfo = TryCast(_grid.GetViewInfo(), GridViewInfo) + Dim _processedImage As New Bitmap(gvInfo.ViewRects.Client.Width + 1, gvInfo.ViewRects.Client.Height + 1) + Using g As Graphics = Graphics.FromImage(_processedImage) + Dim p As Point = CalculateImageLocation(_originalImage.Width, _originalImage.Height, gvInfo, _pictureAlignment) + Dim transparentImage As Bitmap = SetImgageOpacity(_originalImage, 0.5) + g.DrawImage(transparentImage, p) + g.Save() + End Using + _grid.GridControl.BackgroundImage = _processedImage + End Sub + + Private Function CalculateImageLocation(imageWidth As Integer, imageHeight As Integer, gvInfo As GridViewInfo, alignment As ContentAlignment) As Point + Dim location As Point = Point.Empty + Dim rect As Rectangle = gvInfo.ViewRects.Rows + Dim indicatorWidth As Integer = gvInfo.ViewRects.IndicatorWidth + Dim vScrollSize As Integer = If(gvInfo.VScrollBarPresence = ScrollBarPresence.Visible, 20, 0) + Dim hSctollSize As Integer = If(gvInfo.HScrollBarPresence = ScrollBarPresence.Visible, 20, 0) + + Select Case alignment + Case ContentAlignment.BottomCenter + location.Offset((rect.Width / 2) - (imageWidth / 2), rect.Bottom - imageHeight - hSctollSize) + Exit Select + Case ContentAlignment.BottomLeft + location.Offset(indicatorWidth, rect.Bottom - imageHeight - hSctollSize) + Exit Select + Case ContentAlignment.BottomRight + location.Offset(rect.Right - imageWidth - vScrollSize, rect.Bottom - imageHeight - hSctollSize) + Exit Select + Case ContentAlignment.MiddleCenter + location.Offset((rect.Width / 2) - (imageWidth / 2), (rect.Height / 2) - (imageHeight / 2)) + Exit Select + Case ContentAlignment.MiddleLeft + location.Offset(indicatorWidth, (rect.Height / 2) - (imageHeight / 2)) + Exit Select + Case ContentAlignment.MiddleRight + location.Offset(rect.Width - imageWidth - vScrollSize, (rect.Height / 2) - (imageHeight / 2)) + Exit Select + Case ContentAlignment.TopCenter + location.Offset((rect.Width / 2) - (imageWidth / 2), rect.Top) + Exit Select + Case ContentAlignment.TopLeft + location.Offset(indicatorWidth, rect.Top) + Exit Select + Case ContentAlignment.TopRight + location.Offset(rect.Right - imageWidth - vScrollSize, rect.Top) + Exit Select + Case Else + Exit Select + End Select + Return location + End Function + + Private Sub InitializingBlendingComponent() + _blendingComponent = New XtraGridBlending() + _blendingComponent.GridControl = _grid.GridControl + End Sub +End Class \ No newline at end of file