PDA

View Full Version : حرکت دادن یک عکس



soheil_1367
چهارشنبه 12 اسفند 1388, 17:47 عصر
سلام دوستان من تو فرمم یه عکس دارم که از سمت راست وارد میشه و چند ثانیه وسط صفحه میمونه بعدش از سمت چپ خارج میشه من برای حرکت از کد زیر استفاده کردم که دوتا مشکل دارم باهاش یکی این که وقتی جابه جا میشه اثرش میمونه و دیگه این که وقتی داره حرکت میکنه انگار خاموش روشن میشه یعنی چون پس زمینه ی فرمم سفیده هی سفید میشه کسی میتونه راهنماییم کنه ؟؟؟


for (int i = 0; i < 100; i++)
{
Graphics.FromHwnd(this.Handle).DrawImage(Image.Fro mFile("3.png"), 0 + i, 0 + i);
}
البته از همین کد استفاده نمیکنم چون این به صورت کج میره پایین

m_amin_t
چهارشنبه 12 اسفند 1388, 17:52 عصر
هر دو تا مشکل شما با استفاده از DoubleBuffer حل میشه. توی همین سایت کلی مطلب در موردش هست. یه جستجوی کوچیک بزنی کلی نمونه کد پیدا میکنی. منم دقیقا همین مشکل رو داشتم که همینجوری حل شد.

m_amin_t
چهارشنبه 12 اسفند 1388, 17:59 عصر
http://barnamenevis.org/forum/showthread.php?t=175577&highlight=DoubleBuffer

soheil_1367
چهارشنبه 12 اسفند 1388, 18:10 عصر
دوست عزیز خیلی ممنون که جواب دادی چشمک زدنش درس شد ولی هنوز وقتی عکس جابه جا میشه اثرش میمونه

m_amin_t
چهارشنبه 12 اسفند 1388, 18:32 عصر
این یه نمونه برنامه کوچیکه. یه نگاهی بهش بنداز ببین مشکلتو حل میکنه

soheil_1367
چهارشنبه 12 اسفند 1388, 18:50 عصر
بازم ممنون ولی مشکلم حل نشد چون اگه اون کدی رو که نوشتم نگاه کنی هی یه عکس رو نشون میده ولی قبلی رو پاک نمیکنه من میخوام وقتی عکس جدید نشون داده شد عکس قبلی پاک بشه

m_amin_t
چهارشنبه 12 اسفند 1388, 18:55 عصر
مشکل از اونجاس که شما بافر قبلی رو پاک نمیکنی و روی اون قبلی میکشی برای همین اینجوری میشه. اگه یه نگاهی به کدی که ضمیمه کردم بندازی یه جایی من بافر (Graphic) رو clear میکنم. احتمالا شما این قسمت رو جا انداختی

soheil_1367
چهارشنبه 12 اسفند 1388, 19:08 عصر
مشکل از اونجاس که شما بافر قبلی رو پاک نمیکنی و روی اون قبلی میکشی برای همین اینجوری میشه. اگه یه نگاهی به کدی که ضمیمه کردم بندازی یه جایی من بافر (Graphic) رو clear میکنم. احتمالا شما این قسمت رو جا انداختی

شرمنده نفهمیدم کجاش بافر clear میشه
اگه ممکنه بیشتر توضیح بده

soheil_1367
چهارشنبه 12 اسفند 1388, 19:17 عصر
g.Clear(panel1.BackColor);
من باید چطوری از این کد استفاده کنم ؟؟؟

m_amin_t
چهارشنبه 12 اسفند 1388, 19:30 عصر
هنگام حرکت عکست بافر رو clear کن. یعنی دقیقا همون کاری که من توی اون نمونه کد برای MouseUp انجام دادم شما برای هر بار حرکت عکس انجام بده. احتمالا از یه تایمر استفاده کرده باشی یا یه جور دیگه که نمیدونم، ولی به هر حال هر جا که عکست داره حرکت میکنه بافر باید پاک بشه و از اول پر بشه.

soheil_1367
چهارشنبه 12 اسفند 1388, 19:34 عصر
دوست عزیز فایلمو گذاشتم اگه میشه خودت بازش کن ببین چیکارش میشه کرد

m_amin_t
چهارشنبه 12 اسفند 1388, 19:52 عصر
اینم برنامه نهایی

soheil_1367
چهارشنبه 12 اسفند 1388, 19:59 عصر
آقا دمت گرم خیلی عالی بود کاشکی از اول فایلمو گذاشته بودم بازم ممنونم

soheil_1367
چهارشنبه 12 اسفند 1388, 21:23 عصر
شرمنده اگه بخوام هم زمان یه عکس دیگه هم در یه جهت دیگه حرکت بکنه باید چیکار کنم ؟؟
من تو همون حلقه نوشتم ولی دومی رو همونطوری چشمک زن نشون میده اگه ممکنه فایلمو ویرایش کن برام بزار

m_amin_t
جمعه 14 اسفند 1388, 20:24 عصر
سلام
اگه یه کم به کد توجه کنی و متوجه روند کار بشی کارای بعدی بسیار ساده س. درضمن استفاده از حلقه for در اینجا به نظر من مناسب نیست و باید از تایمر استفاده بشه. ولی به هر حال اینو بذار درست میشه:

private void Form1_Paint(object sender, PaintEventArgs e)
{
System.Threading.Thread.Sleep(2000);
Graphics.FromHwnd(this.Handle).DrawString("salam", new Font("tahoma", 18), Brushes.Red, 150, 150);
System.Threading.Thread.Sleep(2000);
for (float i = 0; i < 10000; i++)
{
g1.Clear(this.BackColor);
g1.DrawImage(Image.FromFile("3.png"), i, 0);
g1.DrawImage(Image.FromFile("4.png"), i * (-1), 0);
g2.DrawImage(b, 0, 0);
//Graphics.FromHwnd(this.Handle).Clear(this.BackColo r);
//Graphics.FromHwnd(this.Handle).DrawImage(Image.Fro mFile("3.png"), 0 + i, 0);
}
}