RE: افضل ما توصلت له لنظام الباركود - silverlight - 15-05-17
بشكل مبدئي أنا فهمت فكرة الكود الخاص بك
وهي تعتمد علي تحويل البار كود الي ارقام 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
RE: افضل ما توصلت له لنظام الباركود - nabil.1710 - 15-05-17
(15-05-17, 12:37 PM)silverlight كتب : بشكل مبدئي أنا فهمت فكرة الكود الخاص بك
وهي تعتمد علي تحويل البار كود الي ارقام 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
جزاك الله خيرا على تعبك
اولا فى قرائة رمز الباركود اللى مطبوع على الملصق من خلال الاسكانر او الماسح الضوئى يتم استرجاع الرمز الى الرقم الذى تم تحويله و تطبع على textbox داخل البرنامج يعنى اسم الصنف و السعر و اسم الشركة ليس لهم علاقة بالرمز
الرمز لرقم الكود فقط اما اسم الصنف و السعر و اسم الشركة يتم طباعتهم على الملسق فقط للبيان
انا سوف اقوم بتجربة الكود و سوف اضعه فى امر Paint
و سوف اخبرك بالذى تم
اخى لم تخبرنى هل احتفظ بال module1
اخى رجاء ارفق لى السورس و شكرا لمجهوداتك
RE: افضل ما توصلت له لنظام الباركود - محمود صالح - 05-01-18
بدل الاكواد دي مكان مثلها في module1 (وهي من اول انشاء الصورة)
كود :
' انشاء صورة عرضها عدد حروف الباينرى المستخدم
Dim bmp As Bitmap = New Bitmap(Len(Binaryz), 210, System.Drawing.Imaging.PixelFormat.Format24bppRgb)
Dim z As String ' متغير لمعرفة لون الخط
Dim GraphZ As Graphics = Graphics.FromImage(bmp)
Dim RectZ As Rectangle = New Rectangle(0, 0, bmp.Width, bmp.Height) ' مستطيل بحجم الصورة لاعطاء الخلفية باللون الابيض
' فرشاه لدهان المستطيل السابق باللون الابيض
Dim myBrush As Brush = New Drawing.Drawing2D.LinearGradientBrush(RectZ, Color.White, Color.White, Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal)
' دهان المستطيل السابق باللون الابيض
GraphZ.FillRectangle(myBrush, RectZ)
' رسم خطوط الباركود
Dim PenZ As Pen
Dim point1 As Point ' نقطة بداية الخط
Dim point2 As Point ' نقطة نهاية الخط
For I = 1 To Len(Binaryz)
z = Mid(Binaryz, I, 1)
If z = "0" Then
PenZ = New Pen(Color.Black, 1)
point1 = New Point(I, 45)
point2 = New Point(I, 120)
GraphZ.DrawLine(PenZ, point1, point2)
Else
PenZ = New Pen(Color.White, 1)
point1 = New Point(I, 45)
point2 = New Point(I, 120)
GraphZ.DrawLine(PenZ, point1, point2)
End If
Next
' رسم النص المراد ترميزه اسفل الكود
Dim format1 As New StringFormat
format1.Alignment = StringAlignment.Center
GraphZ.DrawString(TheText, New Font("times new roman", 16, FontStyle.Bold), New SolidBrush(Color.Black), bmp.Width / 2, 120, format1)
GraphZ.DrawString(Kind, New Font("times new roman", 24, FontStyle.Bold), New SolidBrush(Color.Black), bmp.Width / 2, 165, format1)
GraphZ.DrawString(Price, New Font("times new roman", 24, FontStyle.Bold), New SolidBrush(Color.Black), bmp.Width / 2, 0, format1)
Code128 = bmp
انا كبرت الصورة كما قال لك الاستاذ الفاضل silverlight
اخيرا في حاجة ممكن تفزعك وهي صورة الباركود في picbox الى اسمها في المثال PicBarCode اذهب الى خاصية
PicBarCode.BackgroundImageLayout وغيرها الى Stretch
طبعا ده كله للمثال بتاعك وليس المثال الاخير
رجاء لما تجربها عملي قلي ايه النتيجة
RE: افضل ما توصلت له لنظام الباركود - nabil.1710 - 10-05-18
السلام عليكم اخوتي
اردة تعديل بسيط على الكود من فضلكم
اضفط على Form1 عدد 1 combobox و اريد من خلاله التحكم في نوع الخط و يسمع على الملسق بعد الطباعة
حاولت التعديل من الموديول بهذه الطريقة ولكن اعطتني خطاء
قبل التعديل
GraphZ.DrawString(Company, New Font("times new roman", 12, FontStyle.Bold), New SolidBrush(Color.Black), 0, 50)
بعد التعديل
GraphZ.DrawString(Company, New Font(form1.combobox1.text), New SolidBrush(Color.Black), 0, 50)
السورس كود فى المرفقات
|