الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف تدوير الصور في الدلفي

بدأه white في 9 مارس 2009 · 3 رد · 927 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــة ،،

سؤالى هو كيف اقوم بتدوير صورة مع او عكس اتجاه الساعة ولكن من خلال كود بالدلفي او باستخدام كود API ...

القصة هي اني عامل برنامج يقوم مسح مجموعة صور من السكنر ثم يحفظها على القرص و المشكلة هي ان بعض الصور مسحت مقلوبة .. فاريد عن طريق البرنامج تمكين للمستخدم تدوير الصورة المقلوبة ثم حفظها من جديد على القرص مثل مافي windose picture viewer

وشكرا،،

#2

السلام عليكم...

نفرض أن لديك نافذة لتحرير الصورة (تدوير الصورة)...

1. ضع على الـ Form مكون Image واضبط الخاصية Name على imgSource و اضبط الخاصية AutoSize على True.

2. أضف مكون Image آخر و اضبط الخاصية Name على imgTarget و اضبط الخاصية Visible على False. اترك الخاصية AutoSize مضبوطة على False.

3. أضف زري أمر (Button). نفر أن اسميهما Button1 و Button2 أحدهما لتدوير الصورة باتجاه عقارب الساعة و الآخر لتدوير الصورة عكس عقارب الساعة.

4. تحت عبارة type في القسم interface قم بتعريف النوع التالي:

  1. TImageRotationDir = (irdClockwise, irdAnteClockwise);
  2.  
  3.  

5. في القسم private الخاص بـ Class الـ Form أضف التصريحين التاليين:

  1. procedure Rotate90Degrees(Direction: TImageRotationDir);
  2. procedure SaveAsJpg(AFileName: string);
  3.  
  4.  

6. في القسم imlementation عرف المصفوفة التالية:

  1. var
  2. Vertices: array[0..2] of TPoint;
  3.  
  4.  

7. انسخ الكود التالي إلى القسم implementation. انتبه لاسم الـ Form. في هذا الكود اسمها Form1

  1. // إجراء تدوير الصورة
  2. procedure TForm1.Rotate90Degrees(Direction: TImageRotationDir);
  3. begin
  4. if (Direction <> irdClockwise) and (Direction <> irdAnteClockwise) then
  5. Exit;
  6.  
  7. imgSource.AutoSize := True;
  8. imgTarget.Width := imgSource.Height;
  9. imgTarget.Height := imgSource.Width;
  10.  
  11. case Direction of
  12. irdClockwise: begin
  13. Vertices[0].X := imgSource.Height;
  14. Vertices[0].Y := 0;
  15. Vertices[1].X := imgSource.Height;
  16. Vertices[1].Y := imgSource.Width;
  17. Vertices[2].X := 0;
  18. Vertices[2].Y := 0;
  19. end;
  20. irdAnteClockwise: begin
  21. Vertices[0].X := 0;
  22. Vertices[0].Y := imgSource.Width;
  23. Vertices[1].X := 0;
  24. Vertices[1].Y := 0;
  25. Vertices[2].X := imgSource.Height;
  26. Vertices[2].Y := imgSource.Width;
  27. end;
  28. end;
  29.  
  30. imgTarget.Picture.Graphic := nil;
  31. PlgBlt(imgTarget.Canvas.Handle, Vertices[0], imgSource.Canvas.Handle, 0, 0, imgSource.Width, imgSource.Height, 0, 0, 0);
  32.  
  33. imgSource.Picture.Graphic.Assign(imgTarget.Picture.Graphic);
  34. end;
  35.  
  36. // JPG إجراء لحفظ الصورة بتنسيق
  37. procedure TForm1.SaveAsJpg(AFileName: string);
  38. var
  39. JpgPic: TJPEGImage;
  40. begin
  41. try
  42. JpgPic := TJPEGImage.Create;
  43. JpgPic.Assign(imgSource.Picture.Graphic);
  44. JpgPic.SaveToFile(AFileName);
  45. finally
  46. JpgPic.Free;
  47. end;
  48. end;
  49.  
  50.  

8. اكتب السطر التالي في الحدث OnClick لزر التدوير باتجاه عقارب الساعة

  1.  
  2. Rotate90Degrees(irdClockwise);
  3.  
  4.  

8. اكتب السطر التالي في الحدث OnClick لزر التدوير عكس عقارب الساعة

  1.  
  2. Rotate90Degrees(irdAnteClockwise);
  3.  
  4.  

9. لحفظ الصورة بتنسيق Bmp استعمل الكود التالي:

  1.  
  2. imgSource.Picture.SaveToFile('yourfilename.bmp');
  3.  
  4.  

10. لحفظ الصورة بتنسيق JPG قم باستدعاء الدالة المعرفة سابقاً كالتالي:

  1.  
  2. SaveAsJpg('yourfilename.jpg');
  3.  
  4.  

11. لا تنس تحميل الصورة الأصلية من الملف باستعمال كود كالتالي:

  1.  
  2. imgSource.Picture.LoadFromFile('yourfilename.bmp');
  3.  
  4.  

نرجو الاستفادة و السلام.

تم تعديل هذه المشاركة بواسطة najy_zl في 9 مارس 2009 في 16:59

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#3

بارك الله فيك خويا... ومشاءالله عليك على هذا الشرح المفصل و المرتب

هذا هو المطلوب تماااااماً ...جزاك الله خيراً

في حاجة وحدة عند التنفيذ طلب مني Unit ليتم التعرف علىالكائن TJPEGImage وهي Jpeg التى قمت بوضعها في قسم ال uses

وتم التنفيذ بدون مشاكل

الف شكر،،

#4

السلام عليكم

ارجو المزيد من التوضيح للدالة PlgBlt

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

مواضيع مشابهة