PDA

View Full Version : سوال: حرکت تصویر در ویژوال بیسیک



alibehroozi
یک شنبه 01 دی 1392, 11:41 صبح
سلام دوستان

میخواستم بدونم چطوری میشه عکس درون picture box رو توی وی بی حرکت داد ؟
مثلا میخواهم بگیم نقطه ی 3,4 تصویر رو به 0,0 حرکت بده

ممنون

vbhamed
دوشنبه 02 دی 1392, 12:39 عصر
سلام
بهترين راه اينه كه يك PicturBox رو داخل يك PicturBox ديگه بزاري و در PicturBox داخلي عكست رو لود كني
بعدش با تغيير Left, Top مربوط به PicturBox داخلي مي‌توني عكس رو حركت بدي
خاصيت Scalemode مربوط به PicturBox اول يا بيروني رو هم روي 3 يا Pixel بزار

alibehroozi
دوشنبه 02 دی 1392, 17:12 عصر
سلام
بهترين راه اينه كه يك PicturBox رو داخل يك PicturBox ديگه بزاري و در PicturBox داخلي عكست رو لود كني
بعدش با تغيير Left, Top مربوط به PicturBox داخلي مي‌توني عكس رو حركت بدي
خاصيت Scalemode مربوط به PicturBox اول يا بيروني رو هم روي 3 يا Pixel بزار

ممنون از پاسختون
اما من برای ظاهر نمیخواهم حرکتش بدم دارم روی یک پروژه ای کار میکنم که مربوط به پردازش تصویر هست میخواهم عکس داخل اون مثلا 2 تا بالا بره 2 تا چپ
لطفا کمک کنید ( حالا شده با دادن سورس یا نوشتن کد یا یک پیشنهاد )

ممنون

vbhamed
دوشنبه 02 دی 1392, 18:54 عصر
سلام
يك آرايه دو بعدي به اندازه تصوير تشكيل بدين و رنگ تك تك پيكسلهاي تصوير رو درون اون قرار بدين با اين تفاوت كه مقدار حركت رو هم اعمال كنيد، مثلا اگر قراره تصوير 2 تا بالا و 2 تا چپ بره رنگ پيكسل 3,3 در PictureBox در خونه 1,1 آرايه قرار مي‌گيره پيكسلهاي بيرون تصوير هم از بين ميرن

يك نكته هم مهمه، تصوير رو در يك Picturebox مخفي لود كنيد، در آرايه ذخيره كنيد و در Picturebox اصليتون كه كاربر ميبينه رسمش كنيد، خاصيت AutoRedraw مربوط به Picturebox هم True باشه، دليل اينكار هم اينه كه اگر تصوير در Picturebox اصليتون لود شده باشه بعدا نمي‌تونيد تغييرش بدين و اگر هم روي Picturebox چيزي رسم كنيد در حافظه اصلي Picturebox ذخيره نميشه

ضمنا اگر قراره پيكسلهاي خارج شده از كادر حفظ بشن و از بين نره، بايد خونه هاي آرايه رو دقيقا معادل خونه هاي Picturebox مقدار دهي كنيد و موقع رسم مجدد مقدار حركت رو اعمال كنيد

براي خوندن رنگ پيكسلهاي Picturebox از تابع Point استفاده كنيد به شكل زير كه رنگ نقطه x,y رو برمي‌گردونه
Picture1.Point(x,y)

براي تغيير رنگ هم كه تابع Pset
Picture1.Pset(x,y),c(x,y)
در دستور بالا آرايه C همون آرايه دو بعدي هست كه تصوير در اون به صورت كد رنگ ذخيره شده

البته انجام كار با اين دستورات زمان زيادي ميبره ولي منظور راه حل مسئله بود، در عمل مي‌توانيد از توابع API مثل CopyMemory و ... براي سرعت بالاتر استفاده كنيد