Imports System.Drawing Imports System.Net Imports Model Public Class MW6Datamatrix Dim ObjPointMinus As Integer = 0 Public Sub Generage_BarcodeImage(ByRef docdata As clsDocData, temppath As String) Dim FontColor As Color = Color.Black Dim BackColor As Color = Color.White Dim FontName As String = docdata.Zusatz_Font Dim FontSize As Integer = docdata.Zusatz_FontSize Dim Height As Integer = 0 Dim Width As Integer = 0 Dim objFont As New Drawing.Font(FontName, FontSize) Dim image1bmp As New Bitmap(400, 400) Dim image1 As Bitmap = Datamatrix_Generator_1(Height, Width, docdata) Dim objFontsize As Graphics = Graphics.FromImage(image1bmp) Dim sf = objFontsize.MeasureString(docdata.barcode_text, objFont) Select Case docdata.barcode_formatn Case 0, 2 If image1.Width < 70 Then Width = sf.Width + 10 + image1.Width Else Width = image1.Width * 3 Case 1, 3 If image1.Width < 70 Then Width = sf.Width + 10 + image1.Width Else Width = image1.Width * 3 Case 22 If image1.Height < 70 Then Height = sf.Height + 10 + image1.Height Else Height = image1.Height * 3 Case 33 If image1.Height < 70 Then Height = sf.Height + 10 + image1.Height Else Height = image1.Height * 3 End Select Dim objBitmap As New Bitmap(Width, Height) Dim objGraphics As Graphics = Graphics.FromImage(objBitmap) Dim objBrushForeColor As New SolidBrush(FontColor) Dim objBrushBackColor As New SolidBrush(BackColor) Dim objColor As Color Select Case docdata.barcode_formatn Case 0 'rechts Dim stringFormat As New StringFormat() stringFormat.Alignment = StringAlignment.Far stringFormat.LineAlignment = StringAlignment.Near objGraphics.FillRectangle(objBrushBackColor, 0, 0, Width, Height) Dim objPoint As New PointF(Width - image1.Width - 10, Height - sf.Height - ObjPointMinus) objGraphics.DrawString(docdata.barcode_text, objFont, objBrushForeColor, objPoint, stringFormat) objGraphics.DrawImage(image1, New Drawing.Point(Width - image1.Width, 0)) Case 1 'links objGraphics.FillRectangle(objBrushBackColor, 0, 0, Width, Height) Dim objPoint As New PointF(image1.Width + 10, Height - sf.Height - ObjPointMinus) objGraphics.DrawString(docdata.barcode_text, objFont, objBrushForeColor, objPoint) objGraphics.DrawImage(image1, New Drawing.Point(0, 0)) Case 2 'links objGraphics.FillRectangle(objBrushBackColor, 0, 0, Width, Height) Dim objPoint As New PointF(image1.Width + 10, Height - sf.Height - ObjPointMinus) objGraphics.DrawString(docdata.barcode_text, objFont, objBrushForeColor, objPoint) objGraphics.DrawImage(image1, New Drawing.Point(0, 0)) objBitmap.RotateFlip(RotateFlipType.Rotate90FlipNone) Case 3 Dim stringFormat As New StringFormat() stringFormat.Alignment = StringAlignment.Far stringFormat.LineAlignment = StringAlignment.Near objGraphics.FillRectangle(objBrushBackColor, 0, 0, Width, Height) Dim objPoint As New PointF(Width - image1.Width - 10, Height - sf.Height - ObjPointMinus) objGraphics.DrawString(docdata.barcode_text, objFont, objBrushForeColor, objPoint, stringFormat) objGraphics.DrawImage(image1, New Drawing.Point(Width - image1.Width, 0)) objBitmap.RotateFlip(RotateFlipType.Rotate90FlipNone) Case 3 End Select image1 = Nothing objBitmap.Save(temppath + "a_" + docdata.Dokumentid + ".png", System.Drawing.Imaging.ImageFormat.Png) objBitmap = Nothing End Sub Public Function Datamatrix_Generator_1(ByRef Height As Integer, ByRef width As Integer, ByRef docdata As clsDocData) As Image Dim DMNetCtrl As New MW6.SDK.DataMatrix.DataMatrixNet DMNetCtrl.Data = docdata.barcode_content Dim ActualRows As Integer Dim ActualCols As Integer Dim ActualWidth As Integer Dim ActualHeight As Integer Dim ExtraWidth As Integer = 0 Dim ExtraHeight As Integer = 0 Dim imgsize As Integer DMNetCtrl.GetActualRC(ActualRows, ActualCols) DMNetCtrl.GetActualSize(True, Nothing, ActualWidth, ActualHeight) DMNetCtrl.SetSize(ActualWidth + ExtraWidth, ActualHeight + ExtraHeight) Dim MS As System.IO.MemoryStream = New System.IO.MemoryStream DMNetCtrl.SaveAsMemory(MS, System.Drawing.Imaging.ImageFormat.Png) Dim img4 As Image img4 = System.Drawing.Image.FromStream(MS) If docdata.barcode_kantenlaenge = "" Then docdata.barcode_kantenlaenge = 2 Try imgsize = docdata.barcode_kantenlaenge * 37.795275593333 Catch imgsize = 1.5 * 37.795275593333 End Try img4 = AutoSizeImage(img4, imgsize, imgsize, True) width = img4.Width Height = img4.Height MS.Close() Return img4 End Function Public Function AutoSizeImage(ByVal oBitmap As Image, ByVal maxWidth As Integer, ByVal maxHeight As Integer, Optional ByVal bStretch As Boolean = False) As Image ' Größenverhältnis der max. Dimension Dim maxRatio As Single = maxWidth / maxHeight ' Bildgröße und aktuelles Größenverhältnis Dim imgWidth As Integer = oBitmap.Width Dim imgHeight As Integer = oBitmap.Height Dim imgRatio As Single = imgWidth / imgHeight ' Bild anpassen? If (imgWidth > maxWidth Or imgHeight > maxHeight) Or (bStretch) Then If imgRatio <= maxRatio Then ' Größenverhältnis des Bildes ist kleiner als die ' maximale Größe, in der das Bild angezeigt werden kann. ' In diesem Fall muss die Bildbreite angepasst werden. imgWidth = imgWidth / (imgHeight / maxHeight) imgHeight = maxHeight Else ' Größenverhältnis des Bildes ist größer als die ' maximale Größe, in der das Bild angezeigt werden kann. ' In diesem Fall muss die Bildhöhe angepasst werden. imgHeight = imgHeight / (imgWidth / maxWidth) imgWidth = maxWidth End If ' Bitmap-Objekt in der neuen Größe erstellen Dim oImage As New Bitmap(imgWidth, imgHeight) ' Bild interpolieren, damit die Qualität erhalten bleibt Using g As Graphics = Graphics.FromImage(oImage) g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic g.DrawImage(oBitmap, New Drawing.Rectangle(0, 0, imgWidth, imgHeight)) End Using ' neues Bitmap zurückgeben Return oImage Else ' unverändertes Originalbild zurückgeben Return oBitmap End If End Function End Class