From b320e459e119dac30dbbf8677a1353413c5e4ea2 Mon Sep 17 00:00:00 2001 From: Furrtek Date: Tue, 24 Oct 2023 19:48:57 +0200 Subject: [PATCH] VB6: Added beta support for color ESLs --- vb6/ESLTool.bas | 19 ++- vb6/ESLTool.exe | Bin 61440 -> 73728 bytes vb6/ESLTool.frm | 445 +++++++++++++++++++++++++++++++++++++++--------- vb6/ESLTool.vbp | 2 +- vb6/ESLTool.vbw | 6 +- 5 files changed, 389 insertions(+), 83 deletions(-) diff --git a/vb6/ESLTool.bas b/vb6/ESLTool.bas index 67b517a..bb3ba45 100644 --- a/vb6/ESLTool.bas +++ b/vb6/ESLTool.bas @@ -10,6 +10,8 @@ End Type Public FrameCount As Integer Public Frames(1024) As frame_t Public Compressed() As Byte +Public PixelsBWR() As Byte +Public PixelsBWRD() As Byte Private Declare Function WritePrivateProfileString Lib "kernel32" _ Alias "WritePrivateProfileStringA" _ @@ -26,7 +28,20 @@ Alias "GetPrivateProfileStringA" _ ByVal lpReturnedString As String, _ ByVal nSize As Long, _ ByVal lpFileName As String) As Long - + +Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long +Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long +Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long +Declare Function SaveDC Lib "gdi32" (ByVal hdc As Long) As Long +Declare Function RestoreDC Lib "gdi32" (ByVal hdc As Long, ByVal nSavedDC As Long) As Long +Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long + +Public Type RGB + R As Single + G As Single + B As Single +End Type + Public Function INIWrite(sSection As String, sKeyName As String, sNewString As String, sINIFileName As String) As Boolean Call WritePrivateProfileString(sSection, sKeyName, sNewString, sINIFileName) INIWrite = (Err.Number = 0) @@ -122,7 +137,7 @@ Function CRC16(bytes() As Byte, ByVal sz As Integer) As Double Dim poly_hi As Byte, poly_lo As Byte Dim CRCLSB As Byte, CRCMSB As Byte Dim B As Integer, bi As Integer - Dim X As Byte + Dim x As Byte 'result = 0x8408 result_hi = &H84 diff --git a/vb6/ESLTool.exe b/vb6/ESLTool.exe index a283b4082eb9f7975cc188c84573971c01bc4ac7..53215c019293f0b02b940be0f71be610f822b608 100644 GIT binary patch literal 73728 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 s!Vzgn9<12y6$eKC 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 K#DVvi1OE?&iE+~a diff --git a/vb6/ESLTool.frm b/vb6/ESLTool.frm index 680604a..2e87d6b 100644 --- a/vb6/ESLTool.frm +++ b/vb6/ESLTool.frm @@ -14,20 +14,118 @@ Begin VB.Form FrmMain ScaleMode = 3 'Pixel ScaleWidth = 369 StartUpPosition = 2 'CenterScreen + Begin VB.PictureBox PictBox + Appearance = 0 'Flat + AutoRedraw = -1 'True + AutoSize = -1 'True + BackColor = &H80000005& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 2235 + Index = 4 + Left = 120 + ScaleHeight = 149 + ScaleMode = 3 'Pixel + ScaleWidth = 248 + TabIndex = 20 + Top = 120 + Visible = 0 'False + Width = 3720 + End + Begin VB.PictureBox PictBox + Appearance = 0 'Flat + AutoRedraw = -1 'True + AutoSize = -1 'True + BackColor = &H80000005& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 2235 + Index = 3 + Left = 120 + ScaleHeight = 149 + ScaleMode = 3 'Pixel + ScaleWidth = 248 + TabIndex = 19 + Top = 120 + Visible = 0 'False + Width = 3720 + End + Begin VB.PictureBox PictBox + Appearance = 0 'Flat + AutoRedraw = -1 'True + AutoSize = -1 'True + BackColor = &H80000005& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 2235 + Index = 2 + Left = 120 + ScaleHeight = 149 + ScaleMode = 3 'Pixel + ScaleWidth = 248 + TabIndex = 18 + Top = 120 + Visible = 0 'False + Width = 3720 + End + Begin VB.PictureBox PictBox + Appearance = 0 'Flat + AutoRedraw = -1 'True + AutoSize = -1 'True + BackColor = &H80000005& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 2235 + Index = 1 + Left = 120 + ScaleHeight = 149 + ScaleMode = 3 'Pixel + ScaleWidth = 248 + TabIndex = 17 + ToolTipText = "Click in picture to set update position" + Top = 120 + Visible = 0 'False + Width = 3720 + End Begin VB.Frame FrameRight BorderStyle = 0 'None Caption = "Frame1" - Height = 2775 + Height = 2895 Left = 3960 TabIndex = 1 - Top = 0 + Top = 120 Width = 1695 + Begin VB.CheckBox CheckDither + Caption = "Dithering" + Height = 255 + Left = 120 + TabIndex = 16 + Top = 1680 + Width = 1335 + End + Begin VB.CheckBox CheckPreview + Caption = "Preview" + Height = 255 + Left = 120 + TabIndex = 15 + Top = 1920 + Value = 1 'Checked + Width = 1335 + End + Begin VB.CheckBox CheckColor + Caption = "Color ESL" + Height = 255 + Left = 120 + TabIndex = 14 + Top = 1440 + Width = 1335 + End Begin VB.CommandButton CmdUpdate Caption = "Update ESL" Height = 495 Left = 120 TabIndex = 5 - Top = 2160 + Top = 2280 Width = 1335 End Begin VB.ComboBox ComboPage @@ -97,29 +195,31 @@ Begin VB.Form FrmMain _ExtentX = 847 _ExtentY = 847 _Version = 393216 - Filter = "*.bmp" + CancelError = -1 'True + Filter = "Graphic Files (*.bmp;*.gif;*.jpg)|*.bmp;*.gif;*.jpg|" End Begin VB.Timer Timer1 Interval = 1000 Left = 480 Top = 0 End - Begin VB.PictureBox Picture1 + Begin VB.PictureBox PictBox Appearance = 0 'Flat AutoRedraw = -1 'True AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& - Height = 1680 + Height = 2235 + Index = 0 Left = 120 - ScaleHeight = 112 + ScaleHeight = 149 ScaleMode = 3 'Pixel - ScaleWidth = 208 + ScaleWidth = 248 TabIndex = 0 ToolTipText = "Click in picture to set update position" Top = 120 - Width = 3120 + Width = 3720 End Begin VB.Frame FrameBot BorderStyle = 0 'None @@ -170,6 +270,8 @@ Attribute VB_Exposed = False Option Explicit Public BlasterPresent As Boolean +Dim PixelsBWR() As Byte +Dim PixelsBWRD() As Byte Function GetPLID(Barcode As String) As Byte() On Error GoTo ErrHandler @@ -188,7 +290,7 @@ Function GetPLID(Barcode As String) As Byte() Exit Function ErrHandler: - MsgBox "Invalid barcode data.", vbExclamation + MsgBox "The barcode is invalid.", vbExclamation RetData(0) = 255 RetData(1) = 255 RetData(2) = 255 @@ -196,9 +298,9 @@ ErrHandler: GetPLID = RetData End Function -Sub RecordRLERun(ByVal RunCount As Integer) +Sub RecordRLERun(ByVal RunCount As Long) Dim Bits(16) As Integer - Dim b As Integer, i As Integer + Dim B As Integer, i As Integer ' Convert to binary and count required bits i = 0 @@ -209,14 +311,14 @@ Sub RecordRLERun(ByVal RunCount As Integer) Wend ' Unary-code the value length - 1 - For b = 0 To i - 1 - 1 + For B = 0 To i - 1 - 1 ArrayAppendByte Compressed, 0 - Next b + Next B ' Write bits If i > 0 Then - For b = 0 To i - 1 - ArrayAppendByte Compressed, CByte(Bits(i - b - 1)) - Next b + For B = 0 To i - 1 + ArrayAppendByte Compressed, CByte(Bits(i - B - 1)) + Next B End If End Sub @@ -228,10 +330,53 @@ Sub ArrayAppendByte(arr() As Byte, ByVal v As Byte) arr(NewSize) = v End Sub +Private Sub CheckColor_Click() + UpdateView +End Sub + +Private Sub CheckDither_Click() + UpdateView +End Sub + +Private Sub CheckPreview_Click() + UpdateView +End Sub + +Private Sub UpdateView() + Dim c As Integer + + For c = 0 To 4 + PictBox(c).Visible = False + Next c + ' 0: Original + ' 1: BW + ' 2: BWR + ' 3: BW dithered + ' 4: BWR dithered + + If CheckPreview.Value = vbChecked Then + If CheckDither.Value = vbChecked Then + If CheckColor.Value = vbChecked Then + PictBox(4).Visible = True + Else + PictBox(3).Visible = True + End If + Else + If CheckColor.Value = vbChecked Then + PictBox(2).Visible = True + Else + PictBox(1).Visible = True + End If + End If + Else + PictBox(0).Visible = True + End If +End Sub + Private Sub CmdUpdate_Click() - Dim Pixels(307200) As Byte ' 640x480 + 'Dim Pixels(307200) As Boolean ' 640x480 Dim RunPixel As Byte - Dim RunCount As Integer, BitsPerFrame As Integer + Dim RunCount As Long, BitsPerFrame As Integer Dim ImgWidth As Integer, ImgHeight As Integer Dim ParamFrame As frame_t, DataFrame As frame_t Dim PLID() As Byte @@ -239,17 +384,26 @@ Private Sub CmdUpdate_Click() Dim DMPage As Byte Dim image_bit_data() As Byte Dim Dot As Double, SizeRaw As Double, SizeCompressed As Double, DataSize As Double - Dim R As Integer, G As Integer, b As Integer + Dim R As Integer, G As Integer, B As Integer Dim Px As Integer, Py As Integer, c As Double, i As Double, fr As Integer, bi As Integer - Dim v As Integer + Dim v As Integer, checksum As Integer Dim Padding As Integer, PaddedDataSize As Double, DataFrameCount As Integer FrameCount = 0 - + + ' Check barcode validity If Len(Text1.Text) <> 17 Then MsgBox "The barcode data must be exactly 17 characters.", vbExclamation Exit Sub End If + checksum = 0 + For c = 1 To 16 + checksum = checksum + Asc(Mid(Text1.Text, c, 1)) + Next c + If Trim(Str(checksum Mod 10)) <> Mid(Text1.Text, 17, 1) Then + MsgBox "The barcode is invalid.", vbExclamation + Exit Sub + End If ' Get PLID from barcode string PLID = GetPLID(Text1.Text) @@ -257,48 +411,39 @@ Private Sub CmdUpdate_Click() DMPage = ComboPage.ListIndex - ImgWidth = Picture1.Width - ImgHeight = Picture1.Height + ImgWidth = PictBox(0).Width + ImgHeight = PictBox(0).Height SizeRaw = CDbl(ImgWidth) * CDbl(ImgHeight) Label2.Caption = "Encoding image, please wait..." DoEvents - ' Convert image to 1BPP - i = 0 - For Py = 0 To ImgHeight - 1 - For Px = 0 To ImgWidth - 1 - Dot = Picture1.Point(Px, Py) - - R = (Dot And 255) * 0.21 - G = ((Dot \ 256) And 255) * 0.72 - b = ((Dot \ 65536) And 255) * 0.07 - - If (R + G + b) > 127 Then - Dot = 1 - Else - Dot = 0 - End If - - Picture1.PSet (Px, Py), RGB(Dot * 255, Dot * 255, Dot * 255) - - Pixels(i) = Dot - i = i + 1 - Next Px - Next Py + ' Select between dithered data or not + If CheckDither.Value = vbChecked Then + image_bit_data = PixelsBWRD + Else + image_bit_data = PixelsBWR + End If + ' Select between color data or not + If CheckColor.Value = vbChecked Then + DataSize = CDbl(ImgWidth) * ImgHeight * 2 + Else + DataSize = CDbl(ImgWidth) * ImgHeight + End If + ' Try some RLE compression ReDim Compressed(0) - RunPixel = Pixels(0) + RunPixel = image_bit_data(0) RunCount = 1 Compressed(0) = RunPixel - For c = 1 To i - If Pixels(c) = RunPixel Then + For c = 1 To DataSize + If image_bit_data(c) = RunPixel Then RunCount = RunCount + 1 Else RecordRLERun RunCount RunCount = 1 - RunPixel = Pixels(c) + RunPixel = image_bit_data(c) End If Next c @@ -314,9 +459,8 @@ Private Sub CmdUpdate_Click() DataSize = SizeCompressed Else 'Print ("Compression ratio suxx, using raw data") - image_bit_data = Pixels CompressionType = 0 - DataSize = SizeRaw + 'DataSize = SizeRaw End If ' Pad data to multiple of bits_per_frame @@ -379,11 +523,12 @@ Private Sub CmdUpdate_Click() StackFrame make_refresh_frame(PLID) ' DEBUG - 'Open "out.txt" For Output As #1 + 'Dim concat As String + 'Open "d:\out.txt" For Output As #1 'For fr = 0 To FrameCount - 1 ' concat = "" ' For B = 0 To Frames(fr).Size - 1 - ' concat = concat & hexpad(Frames(fr).Data(B)) & " " + ' concat = concat & HexPad(Frames(fr).Data(B)) & " " ' Next B ' Print #1, concat 'Next fr @@ -464,9 +609,10 @@ Private Sub Form_Load() Next c ComboPage.ListIndex = 0 - Picture1.Line (0, 0)-(Picture1.Width, Picture1.Height), vbBlack - Picture1.Line (Picture1.Width, 0)-(0, Picture1.Height), vbBlack - AutoResize + PictBox(0).Line (0, 0)-(PictBox(0).Width, PictBox(0).Height), vbBlack + PictBox(0).Line (PictBox(0).Width, 0)-(0, PictBox(0).Height), vbBlack + ProcessImage + UpdateView Text1.Text = Left(INIRead("ESLTool", "LastPLID", "ESLTool.ini"), 17) End Sub @@ -481,50 +627,195 @@ Private Sub Form_Unload(Cancel As Integer) INIWrite "ESLTool", "LastPLID", Text1.Text, "ESLTool.ini" End Sub -Function Max(ByVal a As Integer, ByVal b As Integer) - If a >= b Then +Function Max(ByVal a As Integer, ByVal B As Integer) + If a >= B Then Max = a Else - Max = b + Max = B End If End Function -Private Sub AutoResize() - FrmMain.Width = Max(Picture1.Width + 160, 350) * 15 - FrmMain.Height = Max(Picture1.Height + 130, 250) * 15 +Private Sub AddRatio(Pixel As RGB, ByRef Err As RGB, ratio As Single) + If Pixel.R > -16384 And Pixel.R < 16384 Then Pixel.R = Pixel.R + Err.R * ratio + If Pixel.G > -16384 And Pixel.G < 16384 Then Pixel.G = Pixel.G + Err.G * ratio + If Pixel.B > -16384 And Pixel.B < 16384 Then Pixel.B = Pixel.B + Err.B * ratio +End Sub + +Public Sub ProcessImage() + Dim x As Integer, y As Integer + Dim w As Integer, h As Integer + Dim PixelsRGB() As RGB + Dim PixelErr As RGB + Dim CCDC As Long + Dim SOB As Long + Dim RGBLong As Long + Dim S As Long + Dim B As Integer, G As Integer, R As Integer + Dim dB As Integer, dG As Integer, dR As Integer + Dim cbw As Long, cbwr As Long + Dim DataSize As Long, i As Long, j As Long + + Label2.Caption = "Converting image, please wait..." + DoEvents + + w = PictBox(0).Width + h = PictBox(0).Height + DataSize = CLng(w) * h + + FrmMain.Width = Max(w + 160, 350) * 15 + FrmMain.Height = Max(h + 130, 250) * 15 + + CCDC = CreateCompatibleDC(PictBox(0).hdc) + SOB = SelectObject(CCDC, PictBox(0).Picture) + + ReDim PixelsRGB(0 To w - 1, 0 To h - 1) + 'ReDim PixelsBWR(0 To (w - 1) * 2, 0 To (h - 1) * 2) + 'ReDim PixelsBWRD(0 To (w - 1) * 2, 0 To (h - 1) * 2) + ReDim PixelsBWR(0 To (DataSize * 2)) + ReDim PixelsBWRD(0 To (DataSize * 2)) + + i = 0 + j = DataSize + For y = 0 To h - 1 + For x = 0 To w - 1 + RGBLong& = GetPixel(CCDC, x, y) + B = RGBLong \ 65536 + G = (RGBLong And &HFF00&) \ 256 + R = RGBLong And &HFF& + PixelsRGB(x, y).R = R + PixelsRGB(x, y).G = G + PixelsRGB(x, y).B = B + + S = R + G + B + + ' No dithering pass + If S > 3 * 127 Then + ' White + PixelsBWR(i) = 1 + PixelsBWR(j) = 1 + cbw = vbWhite + cbwr = vbWhite + ElseIf R > (G + B) / 2 Then + ' Red + PixelsBWR(i) = 0 + PixelsBWR(j) = 0 + cbw = vbBlack + cbwr = vbRed + Else + PixelsBWR(i) = 0 + PixelsBWR(j) = 1 + cbw = vbBlack + cbwr = vbBlack + End If + + PictBox(1).PSet (x, y), cbw + PictBox(2).PSet (x, y), cbwr + + i = i + 1 + j = j + 1 + Next x + Next y + + i = 0 + j = DataSize + For y = 0 To h - 1 + For x = 0 To w - 1 + B = PixelsRGB(x, y).B + G = PixelsRGB(x, y).G + R = PixelsRGB(x, y).R + + S = CLng(R) + G + B + + If S > 3 * 127 Then + ' White + PixelErr.R = R - 255 + PixelErr.G = G - 255 + PixelErr.B = B - 255 + PixelsBWRD(i) = 1 + PixelsBWRD(j) = 1 + cbw = vbWhite + cbwr = vbWhite + ElseIf R > (G + B) / 2 Then + ' Red + PixelErr.R = R - 255 + PixelErr.G = G + PixelErr.B = B + PixelsBWRD(i) = 0 + PixelsBWRD(j) = 0 + cbw = vbBlack + cbwr = vbRed + Else + PixelErr.R = R + PixelErr.G = G + PixelErr.B = B + PixelsBWRD(i) = 0 + PixelsBWRD(j) = 1 + cbw = vbBlack + cbwr = vbBlack + End If + + If (x + 1 < w) Then AddRatio PixelsRGB(x + 1, y), PixelErr, 7# / 16 + If (x - 1 >= 0) And (y + 1 < h) Then AddRatio PixelsRGB(x - 1, y + 1), PixelErr, 3# / 16 + If (y + 1 < h) Then AddRatio PixelsRGB(x, y + 1), PixelErr, 5# / 16 + If (x + 1 < w) And (y + 1 < h) Then AddRatio PixelsRGB(x + 1, y + 1), PixelErr, 1# / 16 + + PictBox(3).PSet (x, y), cbw + PictBox(4).PSet (x, y), cbwr + + i = i + 1 + j = j + 1 + Next x + Next y + + Label2.Caption = "Ready" End Sub Private Sub menu_openimg_Click() On Error GoTo errchk + Dim w As Integer, h As Integer, c As Integer Dim ratio As Single - Dim resized As Boolean + Dim Resized As Boolean comdlg.ShowOpen - Picture1.Picture = LoadPicture(comdlg.FileName) + PictBox(0).Picture = LoadPicture(comdlg.FileName) - ratio = Picture1.Width / Picture1.Height + w = PictBox(0).Width + h = PictBox(0).Height + ratio = w / h - If Picture1.Width > 640 Then - resized = True - Picture1.Width = 640 - Picture1.Height = 640 / ratio + If PictBox(0).Width > 640 Then + Resized = True + w = 640 + h = 640 / ratio End If - If Picture1.Height > 480 Then - resized = True - Picture1.Height = 480 - Picture1.Width = 480 * ratio + If PictBox(0).Height > 480 Then + Resized = True + h = 480 + w = 480 * ratio End If - If resized = True Then MsgBox "The image was resized to fit into 640*480.", vbInformation + ' Make sure image dimensions are multiples of 4 + If w Mod 4 <> 0 Or h Mod 4 <> 0 Then + MsgBox "The image was resized to make its dimensions multiples of 4.", vbInformation + w = (w \ 4) * 4 + h = (h \ 4) * 4 + End If - AutoResize + For c = 0 To 4 + PictBox(c).Width = w + PictBox(c).Height = h + Next c + + If Resized = True Then MsgBox "The image was resized to fit into 640*480.", vbInformation + + ProcessImage Exit Sub errchk: ' Ignore cancel - If Err.Number <> cdlCancel Then Err.Raise Err.Number + If Err.Number <> cdlCancel And Err.Number <> 53 Then Err.Raise Err.Number End Sub Private Sub Timer1_Timer() diff --git a/vb6/ESLTool.vbp b/vb6/ESLTool.vbp index eb3262d..2c8dd66 100644 --- a/vb6/ESLTool.vbp +++ b/vb6/ESLTool.vbp @@ -15,7 +15,7 @@ HelpContextID="0" CompatibleMode="0" MajorVer=0 MinorVer=1 -RevisionVer=1 +RevisionVer=2 AutoIncrementVer=0 ServerSupportFiles=0 VersionCompanyName="furrtek systems" diff --git a/vb6/ESLTool.vbw b/vb6/ESLTool.vbw index 7976810..4b12483 100644 --- a/vb6/ESLTool.vbw +++ b/vb6/ESLTool.vbw @@ -1,3 +1,3 @@ -FrmMain = 107, 89, 963, 451, C, 22, 22, 879, 377, C -Module1 = 124, 60, 981, 461, C -Module2 = 22, 22, 879, 377, C +FrmMain = 98, 55, 954, 482, , 22, 22, 879, 377, C +Module1 = 161, 114, 1018, 515, +Module2 = 22, 22, 879, 377,