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

كيف أسترجع الوضع الأصلي للصورة بعد عمل Rotate

مغلق
بدأه eias في 9 أكتوبر 2005 · 18 رد · 940 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

واجهتني مشكلة في استرجاع الوضع الأصلي للصورة Bitmap بعد أن قمت بقلبها بالكود التالي:

Dim x As Bitmap = PictureBox1.Image
x.RotateFlip(RotateFlipType.Rotate180FlipNone)

الآن من الطبيعي أن المستخدم ربما سيعود الصورة بوضعها الأصلي..

قمت بحفظ نسخة أخرى من الصورة عند فتحها كالتالي:

Dim xx As Bitmap = PictureBox1.Image

و الآن في الأمر استعادة الصورة لوضعها الطبيعي (طبعا بعد أن قام المستخدم بقلب الصورة في زوايا عديدة 90 270 180

) استخدمت الكود التالي:

   PictureBox1.Image = xx

ولكن المشكلة أن هذا الكود استرجع الصورة لمرة واحدة <_< وبعدها لا يستطيع استرجاعها..لا أعرف لماذا ..ما الحل ..هل

هناك طريقة أفضل..وشكرا

تم تعديل هذه المشاركة بواسطة crazy-man في 9 أكتوبر 2005 في 21:06

#2

السلام عليكم

قم بحذف المتغير من الذاكره

xx.dispose

اللهم انصر الاسلام والمسلمين

2035881233.gif

#3

السلام عليكم

اخي عندما تسند المتغير اللصورة احذف المتغير من الذاكره كي تستطيع تكراره مرة اخره

xx.dispose

اللهم انصر الاسلام والمسلمين

2035881233.gif

#5

أخي الكريم الحقيقة لم تنجح الطريقة لا أعرف لماذا ايضا..و عندما حاولت أن أرفق مثال توضيحي ففتحت مشروع جديد ..و لكن

تخيل الصاعقة لم يتعرف على متغير اسمه Bitmap وكأنه ليس من الVB.NET .. ^.^

#6
eias كتب:
تخيل الصاعقة لم يتعرف على متغير اسمه Bitmap وكأنه ليس من ال VB.NET ..  ^.^

بسيطة :lol:

ضع في قمة الملف الكود التالي :

Imports System.Drawing

و بالنسبة للمشكلة كمان بسيطة :lol:

    Dim x As Bitmap, xx As Bitmap
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
        xx = New Bitmap(PictureBox1.Image)
        x = PictureBox1.Image
    End Sub
    ' زر القلب
    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        x.RotateFlip(RotateFlipType.Rotate90FlipNone)
        PictureBox1.Image = x
    End Sub
    ' زر الاستعادة
    Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
        PictureBox1.Image = xx
    End Sub

جرب الكود :D

سلام :lol:

#7

اخي الكريم crazy-man شكرا على التعديل..الحقيقة أنا قصدي Rotare مثل ال3ds max بس يبدو أن هذا هو التعبير

الصحيح..

MoaM يؤسفني أن أخبرك ^.^...... :lol: ...بفشل الطريقتين : (انصدام) ..الحقيقة أنا استورد الSystem.Drawing بكل

الطريق ومع ذلك لم يتعرف على الBitmap (هل وضع .نيت عندي خطير).

أما بالنسسبة للصورة فأيضا مع New لم ينجح بالاستعادة إلا مرة واحدة غريب فعلا يا رجل..

#8

اخي هذي فكرة فقط قم بعمل نسخة احطياطية للصورة الاصلية في التمب او اي مكان اخر ثم عند التراجع قم بتحميلها

تعلم:كيف تشغل برنامجك (قبل) ما يشتغل ال explorer, مثل ال check desk في الوندوز 98 و me

اللهم عطر يومنا بالايمان وانر قلبنا بالقرآن ورزقنا من حيث لانحتسب واجعل لنا سكينة تطمئن بها روحنا واحفظنا من كل سوء اللهم بارك لنا في رجب وشعبان وبلغنا رمضان آمين يارب العالمين

ranneh.com

#9

أخي الكريم NO BODY CAN BEAT ME الحقيقة هذه الفكرة متعبة في برنامج ضخم ..ثم يجب أن نأخذ أقل الطرق ضررا بالمستخدم ..كما أن المستخدم ربما يحذف الصورة و عندها سنقع بمشاكل...فهذه الطريقة أضمن وشكرا لك

#10

العفو هل تقصد ان طريقتي اضمن ام الطريقة الاخرى؟؟؟؟

يمكنك حذف النسخة الاحطياطية بعد الانتهاء:)

تم تعديل هذه المشاركة بواسطة NO BODY CAN BEAT ME في 10 أكتوبر 2005 في 22:13

تعلم:كيف تشغل برنامجك (قبل) ما يشتغل ال explorer, مثل ال check desk في الوندوز 98 و me

اللهم عطر يومنا بالايمان وانر قلبنا بالقرآن ورزقنا من حيث لانحتسب واجعل لنا سكينة تطمئن بها روحنا واحفظنا من كل سوء اللهم بارك لنا في رجب وشعبان وبلغنا رمضان آمين يارب العالمين

ranneh.com

#11

للأسف أخي طريقتك كتطبيق غير مناسبة ..هو ليس المشكلة في حذفها ..ولكن المشكلة لربما المستخدم نفسه حذف الصور أثناء تشغيل البرنامج

#12

السلام عليكم

كلام الاخ العزيز Moam صحيح كمنطق و تطبيق , ولا غُبار عليه

لكن فقط من باب الصورة قد تكون محذوفة كما قلت وقت التشغيل من قبل المستخدم

أقول هذا شأن أخر, ليس له علاقة بالكود المطروح لانه الكود شيء و التوقع شيئ أخر.

فالمنطق صحيح أن يكون هنالك bitmap مخفي, كمؤشر على صندوق الصور كلما جاءت صورة فيه أخذ نسخة منها

و عند الاستعادة للوضع الطبيعي, نسترجع هذا الـ bitmap عِوضاً عن الذي يقوم بعملية الاستدارة أو قلب الاحداثيات بشكل عكسي.

على العمود هذا مشروع على نفس المنطق الذي ذكره الاخ الكريم Moam

البرنامج منشئ على 2005 بالتوفيق و السداد ,,, السلام عليكم

RotateImageApp.zip

في المثال يتضح المقال

#13

أخي الكريم الغملاسي..ربما طريقة الاتسرجاع العكسية لن تنجح لأن المستخدم لن يدير 90 فقط بل ربما 180 ثم 270 ..لن تعرف ماذا فعل..

ولكن الكود صحيح كما قلت و أنا كودي صحيح لكن هناك خطأ ما لم نجده حتى الآن..

أنا لا أملك 2005 ممكن تنسخ كود الصفحة كاملا و تضعه هنا ..وشكرا^.^

#14

الكود السايق صحيح تماماً مهما كانت درجة الدوران (حتى لو كانت 54356345) و أنا قمت بتجريبه , على العموم إذا كنت تريد نتيجة أفضل قم بإضافة هذا الكود إلى Button2_Click

x = xx

ليصبح

   Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
       PictureBox1.Image =   xx
x  = xx
   End Sub

على كل حال , قم بإرفاق المشروع لنرى ما فيه من أخطاء :lol:

سلام

تم تعديل هذه المشاركة بواسطة MoaM في 11 أكتوبر 2005 في 13:26

#15

مستحيل ..لاتنجح أي طريقة فعلا الوضع لا يحتمل ..

شكرا MoaM الحقيقة أيضا لم تنجح ولكن كما قلت لك اللغة عندي في مشروع جديد لم تعد تتعرف على الBitmap ولو استوردت الSystem.Drawing

ولكن هذه الدالة التي استخدمتها

[

    Public Sub Rotare(ByVal nu As Integer)
        x = PictureBox1.Image
        Select Case nu
            Case 0
                x.RotateFlip(RotateFlipType.Rotate180FlipNone)
                PictureBox1.Image = x
            Case 1
                x.RotateFlip(RotateFlipType.Rotate90FlipNone)
                PictureBox1.Image = x
            Case 2
                x.RotateFlip(RotateFlipType.Rotate270FlipNone)
                PictureBox1.Image = x
            Case 3
                x.RotateFlip(RotateFlipType.Rotate90FlipY)
                PictureBox1.Image = x
            Case 4
                'هنا الاستعادة
                PictureBox1.Image = Nothing
                PictureBox1.Image = xx
                x = xx
        End Select
    End Sub

هل فيهاخطأ ما ..لا أعتقد ..معقول اللغة عندي تكون أصابتها حالة من الهلوسة ..^.^

#18

فعلاً الكود الأخير الذي وضعته يا إياس يقوم باسترجاع الصورة مرة واحدة فقط :blink:

و هذا هو الكود بعد التعديل

    Dim x As System.Drawing.Bitmap, xx As System.Drawing.Bitmap
    Public Sub Rotate(ByVal nu As Integer)
        x = New System.Drawing.Bitmap(PictureBox1.Image)
        Select Case nu
            Case 0
                x.RotateFlip(RotateFlipType.Rotate180FlipNone)
            Case 1
                x.RotateFlip(RotateFlipType.Rotate90FlipNone)
            Case 2
                x.RotateFlip(RotateFlipType.Rotate270FlipNone)
            Case 3
                x.RotateFlip(RotateFlipType.Rotate90FlipY)
            Case 4
                PictureBox1.Image = xx
                Exit Sub
        End Select
        PictureBox1.Image = x
    End Sub
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        xx = New System.Drawing.Bitmap(PictureBox1.Image)
    End Sub

ســـــلام :lol:

تم تعديل هذه المشاركة بواسطة MoaM في 14 أكتوبر 2005 في 10:55

#19

السلام عليكم

فعلا MoaM شكرا لك الكود صحيح ولكن لكن ما الخطأ في الكود الذي كتبته ..هل هو كلمة New فقط و ما هي أهميتها ..

طيب كيف شككت بأمر الNew..يعني هل لها هذه الأهمية..

على كل حال شكرا لك

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…