PDA

View Full Version : سوال: گرفتن عکس از فایل SWF و قرار دادن اون در پیکچر باکس



mahdielectronic
چهارشنبه 19 آبان 1389, 13:48 عصر
سلام به همه ی دوستان

من میخواستم با استفاده از کامپوننت axShockwaveFlash از یکی از فریم های فایل فلش عکس بگیرم و اونو در یک پیکچر باکس نشون بدم!

دوستان کسی میتونه کمکم کنه؟

ممنون از همه:لبخندساده:

mahboube
چهارشنبه 19 آبان 1389, 14:07 عصر
يعني چي؟تو برنامه عكس بگيري؟

يه نرم افزارهست swf2xaml تمام فريمارو بهت ميده ولي به xaml!

mahdielectronic
چهارشنبه 19 آبان 1389, 14:17 عصر
ممنون از جوابتون...

من میخوام فایل فلش رو به صورت فریم به فریم داخل یک پیکچر باکس بزارم و یک پردازشی روش انجام بدم...(داخل خود محیط نرم افزارم)

ممنون از جوابتون:لبخندساده:

mahboube
چهارشنبه 19 آبان 1389, 14:28 عصر
يكسري توابع هستن براي عكس گرفت از فرم و كنترل ها.
شما ميتوني توي يك تايمر كه با تايمر فلشت هماهنگ هست ازش عكس بگيري.
توابع براي عكس گرفتن زيادن اگر خواستي بگو لينك بدم بهت.
البته يه سوال بعد از تغييرات مي ميخواي چيكارشون كني؟؟؟!!!

mahdielectronic
چهارشنبه 19 آبان 1389, 15:17 عصر
این طور کاربردی نیست که از صفحه عکس بگیرم! به قول ما الکترونیکی ها نویز میاد روش بعد برای پردازشش مشکل پیش میاد و دردسره!

بچه ها با این کامپوننتی که معرفی کردم این کار رو کرده بودند ولی نمیدونم چطور...:ناراحت:


البته يه سوال بعد از تغييرات مي ميخواي چيكارشون كني؟؟؟!!!

قراره عکس ها رو به کد هگز تبدیل کنم و بعد هم برای کارهای الکترونیکی استفاده کنم :لبخند:

ممنون از جوابتون

mahboube
چهارشنبه 19 آبان 1389, 17:21 عصر
برا منم جالب شد.يكمم تو متداي اين axshockwave گشتم چيزي كه به درد كار شما بخوره نديدم.مطمئني اين كارو ميكنه؟!
حالا اگر پيدا كردي به مام بگو.
بعد اگر پرو ‍‍ژه اي نيست كه حتما winapp باشه حتما برو باwpf كار كن.اونجا خيلي راحت تر كارتو انجام ميده.
بعد يه سوال چرا swf?!ببخشيد من اينقد سوال ميپرسما!!!

اينم يه چكي كن:
http://www.codeproject.com/KB/graphics/swfdotnet-decompiler.aspx

mahdielectronic
چهارشنبه 19 آبان 1389, 17:37 عصر
دلیلم برای استفاده از SWF ، شرایط کار هست...یعنی صورت مسئله اینه که از فایل های SWF استفاده کنم:لبخندساده:

در اینکه از این استفاده کرده بودند که مطمئنم!

یکی از بچه ها با دلفی نوشته بود....یه کد کوچیک هم ازش داد ... من از دلفی سر در نمیارم!

شما میتونید کمکم کنید؟


ShockwaveFlash1.PaintTo(bmp.Canvas.Handle,0,0);

mahboube
چهارشنبه 19 آبان 1389, 17:48 عصر
اين كامپوننته كه چيزي شبيه paintto نداشت.ولي من يه چكي ميكنم.اگر بتونم حتما.

mahdielectronic
چهارشنبه 19 آبان 1389, 18:07 عصر
:متفکر:

یه سوال هم در مورد صحبت اولتون دارم

به نظر شما میتونم موقعیت فایل فلش رو در صفحه ی کامپیوتر پیدا کنم ؟

منظورم اینکه که بعد از عکس گرفتن از کجا بفهمم موقعیت فایل فلش کجاست ؟ چون امکان داره کاربر صفحه رو بزرگ کنه یا موقعیتش رو عوض کنه یا ...

اگه میشه تابع هایی که گفتید از صفحه عکس میگره رو هم بزارید...

اگه یه راهنمایی هم برای اینکه یک تیکه از عکس (همون قسمتی که عکس فلش هست) رو چطور از عکس که گرفتم رو جدا کنم ممنون میشم

ممنون از راهنمائیتون :لبخندساده:

mahboube
پنج شنبه 20 آبان 1389, 08:55 صبح
توابعي كه عكس ميگيرند يك handle از كنترلي كه بايد ازش عكس بگيريد كه اينجا shockwave هست رو ميگيرن و از همون كنترل عكس ميگيرن.يعني شما از صفحه عكس نميگيريد از كنترلتون عكس ميگيريد كه باز توي اون هم مي تونيد انتخاب كنيد كه فقط از يك قسمتي از محتواي كنترل عكس بگيره.
لينكاش رو هم مي ذارم.سوالي در موردشون داشتيد در خدمتم.
موفق باشيد.

mahboube
پنج شنبه 20 آبان 1389, 09:31 صبح
http://barnamenevis.org/forum/showthread.php?t=241445

http://barnamenevis.org/forum/showthread.php?t=241240

mahdielectronic
شنبه 22 آبان 1389, 05:49 صبح
سلام

خیلی خیلی خیلی ممنون

من کد ها رو به شکل زیر در آوردم


private Bitmap bitblt_function()
{

System.IntPtr srcDC = GetDC(this.axShockwaveFlash1.Handle);
bm = new Bitmap(this.axShockwaveFlash1.Width, this.axShockwaveFlash1.Height);
Graphics g = Graphics.FromImage(bm);
System.IntPtr bmDC = g.GetHdc();
BitBlt(bmDC, 0, 0, bm.Width, bm.Height, srcDC, 0, 0, 0x00CC0020 /*SRCCOPY*/);
ReleaseDC(this.axShockwaveFlash1.Handle, srcDC);
g.ReleaseHdc(bmDC);
g.Dispose();
return bm;
}

ولی نمیدونم خط زیر رو کجای کد هام بزارم:ناراحت:(خوب الکترونیکیم رشتم نیست دیگه :لبخند:)


[DllImport("gdi32.dll")]

اگر بزارم بالای همه ی کدها(همون جایی که using ها هست) خطای زیر رو میده:
Error 1 Expected class, delegate, enum, interface, or struct

پروژم رو اتچ میکنم بی زحمت یه نگاهی بندازید ببینید میتونید کمک کنید...

خیلی ممنون:لبخندساده:

mahboube
شنبه 22 آبان 1389, 11:01 صبح
سلام
برات درستش كردم.اميدوارم كارتو راه بندازه.اويplay كن بعد capture بزن حالشو ببر.

syntiberium
شنبه 22 آبان 1389, 13:50 عصر
ببخشید این مشکل رو چجوری می شه حل کرد ؟
60171

mahboube
شنبه 22 آبان 1389, 14:50 عصر
اين به خاطر تابع bitblt هست.چون توي طول و عرض كنترلي كه هندلش شده از هرچي باشه عكس ميگيره)كه الان نمي دونم چطوري ميشه حلش كرد.ولي براي عكس گرفتن از تابع printwindow مي تونيد استفاده كنيد.
البته من فكر ميكنم همين تابع هم درست عمل ميكنه ولي من الان خاطرم نيست!

iman-63
سه شنبه 25 آبان 1389, 15:00 عصر
سلام.
با تشکر از پیگیری شما.
این روش، روش خوبیه. اما 2 تا ایراد مهم داره. اولیش اینه که سرعت رندر رو پایین میاره. و دوم اینکه برنامه باید حتماً maximaize باشه. بعنوان مثال اگه یه برنامه دیگه روی این کنترل قرار بگیره یا minimize بشه دیگه نمیشه باهاش کار کرد.
من تونستم با دلفی این مشکلو حل کنم (همانطور که دوستمون گفت) اما توی محیط NET. نشد کاری کرد. من میدونم که باید از توابع api استفاده کرد، اما خوب توی #C مهارت آنچنانی ندارم. اگه این تایپیک رو ادامه بدین قطعاً این مشکل حل میشه.
موفق باشید.

mahboube
سه شنبه 25 آبان 1389, 15:09 عصر
من دقيقا نفهميدم مشكلو!ولي سرعت رندر رو نمي دونم دقيقاچي كار ميشه كرد واصلا پايين مياره يا نه ولي براي Minimize ها راهش اينه:
http://barnamenevis.org/forum/showthread.php?t=251021

البته در مورد taskmanager روي تمام پنجره ها قرا ميگيره.كه بايد با كد جابجاش كرد احتمالا.شايدم تابع printwindow مشكلشو حل كنه.بعدا وقت كنم چكش ميكنم.

iman-63
جمعه 28 آبان 1389, 23:34 عصر
سلام.
من تابعی میخوام که از هر کنترلی عکس بگیره. چه روی صفحه نمایش باشه و چه نباشه.
مثلاً فرض کنید یه انیمیشن درحال اجراشدن هست و من میخوام اونو رندر کنم. با این برنامه در صورتی میشه اینکارو کرد که این انیمیشن در صفحه نمایش باشه. یعنی در زمان رندر نباید نرم افزار رو minimize کرد یا یه پنجره دیگه روی اون قرار داد. دلیلش هم اینه که از صفحه نمایش عکس میگره (فکر کنم). اما اون تابعی که من در دلفی نوشتم در هر حالتی کارشو میکنه.

حالا یه سوال دیگه. آیا میشه من این قسمت برنامه رو با دلفی بنویسم و اونو dll کنم و در #C استفاده کنم. (البته میتونم این قسمت رو توی دلفی 2010 بنیسم و تحت NET. کامپایل کنم.)
بهر حال می خوام یه جورایی این مشکل رو حل کنم.
ممنون از پیگیری هاتون.

hassan_kahrizy
شنبه 29 آبان 1389, 09:24 صبح
بسمه تعالی
با سلام
کامپوننت f-in-box رو تست کنید تابعی برای گرفتن عکس از فریم های فلش داشت

iman-63
شنبه 29 آبان 1389, 10:43 صبح
سلام.


براي Minimize ها راهش اينه:
http://barnamenevis.org/forum/showthread.php?t=251021 (http://barnamenevis.org/forum/showthread.php?t=251021)


فکر کنم این مشکلو حل کنه، اما خیلی خفن بود!!!!
اگه ممکنه خلاصش کنین و بذارید. یعنی بیاد هندل یه کنترل (مثلاً کنترل فلش یا هر چیز دیگه ای) رو روی فرم خودش بگیره و توی picturebox نشون بده.
خیلی خیلی ممنون.

mahboube
شنبه 29 آبان 1389, 11:31 صبح
باشه.ولي الان وقت ندارم.شب ميذارمش.
فقط فعلا همينو بگم كه سيستمش اينه كه فرم رو باحالت ترنسپرنت باز ميكنه،ازش عكس ميكنه و مينيمايز ميكنه.چون فرمي كه مينيمايز شده توي حافظه ي كارت گرافيك وجود نداره كه ازش عكس بگيره.

mahboube
شنبه 29 آبان 1389, 17:31 عصر
اينو ساده ترش كردم.شما اگه خواستي استفاده كني سه تا كلاسو add كن.(نفهميديشون هم مهم نيست).
بعد استفاده كردن ازشم راحته.نمونشو گذاشتم.ببخشيد وقت نشد زياد توضيحش بدم.ولي اگر تو استفاده ازش مشكل داشتي در خدمتم.
موفق باشي.

iman-63
شنبه 29 آبان 1389, 23:02 عصر
سلام
واقعاً ممنون. امشب حتماً تستش می کنم.
موفق باشید.

hassan_kahrizy
یک شنبه 30 آبان 1389, 09:42 صبح
بسمه تعالی
با سلام
ذخیره فریم های فلش به عنوان تصویر به سادگی توسط f-in-box شدنیه
این هم مثالش