[دلفي] التحكم في الماسح الضوئي في دلفي
---- عند استخدام دلفي لتطوير أنظمة إدارة المعلومات، غالبًا ما تتم معالجة الصور، وهو أيضًا اتجاه لا مفر منه في تطوير أنظمة إدارة المعلومات. كيفية الحصول على معلومات الصورة المطلوبة من خلال الماسح الضوئي في دلفي؟ لا يوجد أكثر من ثلاث طرق أساسية:
من خلال برامج معالجة الصور، مثل الفوتوشوب وما إلى ذلك، من خلال وظيفتها المتمثلة في مسح الصور ضوئيًا، يمكن معالجتها إلى صور بتنسيق معين ثم استخدامها في نظامك الخاص؛
عبر واجهة الماسح الضوئي Twain.DLL. يتم توفير هذه الواجهة عند تثبيت الماسح الضوئي، وهي في الواقع مكون إضافي يتحكم في الماسح الضوئي من خلال سلسلة من الوظائف؛
التحكم في الماسح الضوئي من خلال تقنية المكونات.
---- استخدام الطريقة الأولى يمكن أن يقلل من تعقيد البرمجة، لكن تكامل النظام ليس مرتفعًا ومن غير المناسب للمستخدمين استخدامه؛ الطريقة الثانية يمكنها التحكم مباشرة في الماسح الضوئي على مستوى برنامج التشغيل، وهو ما يمكن ذلك
يوفر أقصى قدر من المرونة وإمكانية التحكم في البرمجة؛ الطريقة الثالثة يمكنها الاستفادة الكاملة من تقنية المكونات المرئية في دلفي لاستخدام الماسح الضوئي بأمان ومرونة وحرية. في الواقع، الطريقة الثالثة هي أيضا
إنه مبني على واجهة الماسح الضوئي Twain.DLL. تعتمد الطريقة التي تمت مناقشتها في هذه المقالة الطريقة الثالثة.
---- يوفر Windows9X خيار "صورة" في مرفقه، والذي يستخدم مكونات OCX للتحكم في الماسح الضوئي. هناك أربعة imgEdit، وimgAnntool، وimgScan، وimgAdmin، مع هذه المكونات الأربعة، يمكنك التحكم بشكل كامل في الماسح الضوئي. الاستخدام في دلفي هو كما يلي: حدد "صورة" التثبيت في Windows9x. (حدد "إضافة/إزالة البرامج" في لوحة التحكم، ثم حدد "تثبيت Windows"، وانقر فوق خانة الاختيار "البرامج الملحقة"، ثم ابحث عن "صورة" من زر "التفاصيل")
قم بتشغيل Delphi وحدد "Import ActiveX Control" ضمن عنصر القائمة "Component".
في هذا الوقت، يمكنك أن ترى أن هناك "Wang Image Editing Control، Wang Image Scanning Control، Wang
"التحكم في إدارة الصور، التحكم في الصور المصغرة لصور Wang"، حدد هذه العناصر الأربعة، ثم انقر فوق "تثبيت"
الزر، ثم يمكنك رؤية أيقونات هذه المكونات الأربعة تحت تسمية ActiveX على لوحة المكونات.
---- السمات الرئيسية لبرنامج ImgScan: نوع الملف: نوع ملف الصورة (يدعم هذا المكون ثلاثة
الأنواع: TIFF، BMP، AWD)؛
ScanTo: إرجاع أو تعيين غرض الصورة الممسوحة ضوئيًا؛
معنى القيمة المحتملة
0 (افتراضي) عرض الصورة الممسوحة ضوئيًا.
1 قم بعرض الصورة الممسوحة ضوئيًا وكتابتها في ملف.
2 كتابة الصورة إلى ملف
3 اكتب الصورة في الملف في وضع القالب واعرضها.
4. اكتب الصورة في الملف كقالب
5 صورة ممسوحة ضوئيًا بالفاكس
ملحوظة: إذا أخذت القيمة الافتراضية 0،
يجب استخدامه مع مكون Wang ImgEdit.
DestImageControl: اسم مكون Wang ImgEdit؛
Zoom: نسبة تكبير الصورة
الطرق الرئيسية لـ ImgScan: OpenScanner: فتح الماسح الضوئي؛
CloseScanner: أغلق الماسح الضوئي؛
StartScan: بدء المسح؛
StopScan: إيقاف المسح
---- خصائص ImgEdit تتحكم بشكل أساسي في دقة الصورة الممسوحة ضوئيًا، وعرض الصورة وارتفاعها، وما إذا كانت
يسمح بالاختيار الجزئي للصور، وما إلى ذلك؛ وتشمل الطرق الرئيسية نسخ الصور وقصها على لوحة اللصق،
نسخ الصور من الحافظة، وتدويرها، وحجمها، وعكسها، وطباعتها، وحفظها، وتحديثها، وما إلى ذلك.
---- يمكن الاطلاع على التعليمات التفصيلية لمكونات OCX الأربعة المذكورة أعلاه في دلفي.
نظام المساعدة.
---- فيما يلي بعض الأمثلة على استخدام هذين المكونين:
الإجراء Tscanf.N1Click(Sender: TObject);
يبدأ
ImgScan1.ShowSelectScanner;
ملف://حدد الماسح الضوئي المثبت على النظام
نهاية؛
إجراء Tscanf.N2Click(Sender: TObject);
يبدأ
imgedit1.zoom:=100 file://Set عامل التكبير للصورة
إذا لم يكن imgscan1.ScannerAvailable ثم
file://إذا كان الماسح الضوئي المحدد غير متوفر
imgscan1.OpenScanner;// افتح الماسح الضوئي
imgscan1.StartScan; file://ابدأ في مسح الصور
imgscan1.CloseScanner; الملف://إغلاق الماسح الضوئي
نهاية؛
إجراء Tscanf.N8Click(Sender: TObject);
يبدأ
إذا (imgedit1.IsClipboardDataAvailable
و imgedit1.ImageDisplayed ) بعد ذلك
imgedit1.ClipboardPaste(selleft,seltop);
file://لصق الصورة من الحافظة، والمعلمة الخاصة بها هي إحداثيات البداية لمنطقة العرض في Imgedit
نهاية؛
إجراء Tscanf.N1801Click(Sender: TObject);
يبدأ
إذا imgedit1.ImageDisplayed بعد ذلك
imgedit1.Flip; ملف://صورة معكوسة
نهاية؛
إجراء Tscanf.N901Click(Sender: TObject);
يبدأ
إذا imgedit1.ImageDisplayed بعد ذلك
imgedit1.RotateRight file://تدوير الصورة إلى اليمين
نهاية؛
إجراء Tscanf.N6Click(Sender: TObject);
يبدأ
imgedit1.DrawSelectionRect(selleft,
seltop، selwidth، selheight)؛ // إجراء تحديد جزئي للصورة
imgedit1.ClipboardCut(selleft,seltop,
selwidth,selheight);// قص المنطقة المحددة
نهاية؛
---- ملاحظة: عند استخدام وظائف النسخ والقص لمكون Imgedit في DELPHI، سيكون هناك
الأسئلة التالية:
---- 1. إذا قمت بتحديد الصورة بأكملها، فلن تكون هناك مشكلة؛
---- 2. إذا تم تحديد منطقة محلية، فسوف تنحرف المناطق المنسوخة والمقطعة؛
---- 3. إذا كانت DELPHI تقوم بإنشاء واجهة العميل لقاعدة بيانات MS SQL الخلفية، إذن
عند كتابة محتوى الصورة في حقل الصورة بقاعدة البيانات، سيبلغ BDE (محرك قاعدة البيانات) عن خطأ. هذا هو
DELPHI3.0 و4.0 BUG، يمكن لحزمة الترقية 4.0 حل هذه المشكلة.
---- أما المشكلة الثانية فيمكن حلها بهذه الطريقة: onSelectionRectDrawn في Imgedit
اكتب جزءًا من الكود في الحدث لحفظ قيمة حدود المنطقة المحددة في أربعة متغيرات عامة بعد النسخ
ما عليك سوى استخدام المتغيرات المحفوظة مسبقًا لإجراء تحديد آخر قبل القطع (بالطبع، كل هذا سيحدث لاحقًا)
المرحلة، انظر المثال السابق).
---- بيئة التطوير: DELPHI4.0، الماسح الضوئي HP ScanJet 4P؛
---- كود المصدر المرفق.
وحدة المسح الضوئي؛
واجهة
الاستخدامات
ويندوز، الرسائل، SysUtils، الطبقات، الرسومات، الضوابط،
النماذج، ومربعات الحوار، والقوائم، وScanLib_TLB، وExtCtrls، وAxCtrls،
OleCtrls, ImgeditLib_TLB;
يكتب
تسكانف = فئة (TForm)
القائمة الرئيسية 1: القائمة الرئيسية؛
F1: TMenuItem;
N15: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
N16: TMenuItem;
N11: TMenuItem;
N5: TMenuItem;
C1: TMenuItem;
N4: TMenuItem;
E1: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N3: TMenuItem;
N10: TMenuItem;
N9: TMenuItem;
N1801: TMenuItem;
N901: TMenuItem;
N902: TMenuItem;
H1: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
ImgEdit1: TImgEdit;
Bevel1: TBevel؛
ImgScan1: TImgScan;
Bevel2: TBevel؛
الإجراء N4Click(Sender: TObject);
الإجراء N1Click(Sender: TObject);
الإجراء N2Click(Sender: TObject);
الإجراء C1Click(Sender: TObject);
الإجراء N8Click(Sender: TObject);
الإجراء N1801Click(Sender: TObject);
الإجراء N901Click(Sender: TObject);
الإجراء N902Click(Sender: TObject);
الإجراء N6Click(Sender: TObject);
الإجراء N7Click(Sender: TObject);
الإجراء ImgEdit1SelectionRectDrawn(Sender: TObject; Left,Top,
العرض، الارتفاع: عدد صحيح)؛
الإجراء N11Click(Sender: TObject);
خاص
{تصريحات خاصة}
عام
Selleft،Seltop،Selwidth،Selheight:عدد صحيح؛
{التصريحات العامة}
نهاية؛
فار
سكانف: تسكانف؛
تطبيق
{$R *.DFM}
إجراء Tscanf.N4Click(Sender: TObject);
يبدأ
imgedit1.ClearDisplay;
يغلق؛
نهاية؛
إجراء Tscanf.N1Click(Sender: TObject);
يبدأ
ImgScan1.ShowSelectScanner;
نهاية؛
إجراء Tscanf.N2Click(Sender: TObject);
يبدأ
imgedit1.zoom:=100;
إذا لم يكن imgscan1.ScannerAvailable ثم
imgscan1.OpenScanner;
imgscan1.StartScan;
imgscan1.CloseScanner;
نهاية؛
إجراء Tscanf.C1Click(Sender: TObject);
يبدأ
إذا imgedit1.ImageDisplayed بعد ذلك
يبدأ
imgedit1.ClearDisplay;
imgedit1.zoom:=100;
نهاية؛
نهاية؛
إجراء Tscanf.N8Click(Sender: TObject);
يبدأ
إذا (imgedit1.IsClipboardDataAvailable وimgedit1.ImageDisplayed)
ثم
imgedit1.ClipboardPaste(selleft,seltop);
نهاية؛
إجراء Tscanf.N1801Click(Sender: TObject);
يبدأ
إذا imgedit1.ImageDisplayed بعد ذلك
imgedit1.Flip;
نهاية؛
إجراء Tscanf.N901Click(Sender: TObject);
يبدأ
إذا imgedit1.ImageDisplayed بعد ذلك
imgedit1.RotateRight
نهاية؛
الإجراء Tscanf.N902Click(Sender: TObject);
يبدأ
إذا imgedit1.ImageDisplayed بعد ذلك
imgedit1.RotateLeft;
نهاية؛
إجراء Tscanf.N6Click(Sender: TObject);
يبدأ
imgedit1.DrawSelectionRect(selleft,seltop,selwidth,selheight);
imgedit1.ClipboardCut(selleft,seltop,selwidth,selheight);
نهاية؛
إجراء Tscanf.N7Click(Sender: TObject);
يبدأ
imgedit1.DrawSelectionRect(selleft,seltop,selwidth,selheight);
imgedit1.ClipboardCopy(selleft,seltop,selwidth,selheight);
نهاية؛
الإجراء Tscanf.ImgEdit1SelectionRectDrawn(Sender: TObject; Left,
الأعلى، العرض، الارتفاع: عدد صحيح)؛
يبدأ
إذا ((العرض = 0) و (الارتفاع = 0)) ثم
يبدأ
n3.Enabled:=false;
n6.Enabled:=false;
n7.Enabled:=false;
Sellleft:=left;
سيلتوب:=أعلى;
selwidth:=width;
selheight:=height;
نهاية
آخر تبدأ
n6.Enabled:=true;
n7.Enabled:=true;
Sellleft:=left;
سيلتوب:=أعلى;
selwidth:=width;
selheight:=height;
نهاية؛
نهاية؛
إجراء Tscanf.N11Click(Sender: TObject);
يبدأ
إذا لم يكن imgedit1.IsClipboardDataAvailable ثم
إذا imgedit1.imagedisplayed بعد ذلك
imgedit1.ClipboardCopy(0,0,imgedit1.Width,imgededit1.Height);
نهاية؛
نهاية