15-05-17, 12:37 PM
بشكل مبدئي أنا فهمت فكرة الكود الخاص بك
وهي تعتمد علي تحويل البار كود الي ارقام Binary ثم ترسم الخطوط باللون الاسود في حالة ان كانت القيمة تساوي صفرا او ترسمها باللون الابيض في حالة ان كانت القيمة تساوي 1
لكن قبل أن أكمل الكود محتاج أفهم منك كيف يتم قراءة الباركود؟
أم أن الأمر فقط هو رسم الباركود بالإضافة إلي بعض المعلومات الاضافية مثل السعر و اسم الشركة و خلافه
أيضا أحتاج أن أفهم من أين أتيت بأرقام Binary الختصة بالباركود لأنها كلها عبارة عن String
عموما انظر للكود التالي و اخبرني برأيك
أيضا هنا يتم تحويل أرقام الباركود بشكل مباشر و انا لم استخدم الارقام الخاصة بك
لتنفيذ الكود افتح مشروع جديد للتجربة و في الحدث Paint اكتب الكود التالي
وهي تعتمد علي تحويل البار كود الي ارقام Binary ثم ترسم الخطوط باللون الاسود في حالة ان كانت القيمة تساوي صفرا او ترسمها باللون الابيض في حالة ان كانت القيمة تساوي 1
لكن قبل أن أكمل الكود محتاج أفهم منك كيف يتم قراءة الباركود؟
أم أن الأمر فقط هو رسم الباركود بالإضافة إلي بعض المعلومات الاضافية مثل السعر و اسم الشركة و خلافه
أيضا أحتاج أن أفهم من أين أتيت بأرقام Binary الختصة بالباركود لأنها كلها عبارة عن String
عموما انظر للكود التالي و اخبرني برأيك
أيضا هنا يتم تحويل أرقام الباركود بشكل مباشر و انا لم استخدم الارقام الخاصة بك
لتنفيذ الكود افتح مشروع جديد للتجربة و في الحدث Paint اكتب الكود التالي
PHP كود :
Protected Overrides Sub OnPaint(e As PaintEventArgs)
MyBase.OnPaint(e)
e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
Dim str As String = "123456789"
Dim bytes = Encoding.UTF8.GetBytes(str)
Dim s As String = String.Join(Of String)("", bytes.Select(Of String)(Function(b) Convert.ToString(b, 2)))
Dim f As Font = New Font("times new roman", 12.0F, FontStyle.Bold)
Dim txtSize As SizeF = e.Graphics.MeasureString(s, f)
Dim x As Integer = 100
Dim y As Integer = 100
For i = 0 To s.Length - 1
Dim current As String = (s(i))
Dim chrWidth As Integer = e.Graphics.MeasureString(current, f).Width
Dim chrHeight As Integer = e.Graphics.MeasureString(current, f).Height
Dim chrRect As Rectangle = New Rectangle(x, y, Math.Min(chrWidth, 2), Math.Max(chrHeight, 100))
If current = 0 Then
'e.Graphics.DrawString(current, f, New SolidBrush(Color.Black), chrRect)
Using sb As New SolidBrush(Color.Black)
e.Graphics.FillRectangle(sb, chrRect)
End Using
ElseIf current = 1 Then
'e.Graphics.DrawString(current, f, New SolidBrush(Color.White), chrRect)
Using sb As New SolidBrush(Color.White)
e.Graphics.FillRectangle(sb, chrRect)
End Using
Else
Exit For
End If
x += Math.Min(chrWidth, 2)
Next
End Sub