PDA

View Full Version : اجرای تصاویر متحرک GIF در دلفی XE7



idehrayan
شنبه 19 اردیبهشت 1394, 18:06 عصر
سلام دوستان
با این کد میتونید تصاویر متحرک GIF رو به راحتی اجرا کنید
(البته برای دوستانی که مثل من اطلاع نداشتن)


(image1.Picture.Graphic as TGIFImage).Animate:=True;

hooch3000
یک شنبه 20 اردیبهشت 1394, 16:46 عصر
سلام ،فيلم آموزشي استفاده از تصوير متحرك با فرمت GIF را از لينك زير مشاهده نماييد

http://uploadboy.com/y12zsdmmkokw.html
ويا از اينجا
https://youtu.be/VET9SRAnz-8

hamedjim
یک شنبه 23 خرداد 1395, 22:45 عصر
دوستان سلام.
من برای نمایش فایل Gif به این صورت عمل می‌کنم:

1- یوز کردن GifImg
2- اضافه کردن کامند زیر در FormCreate برنامه

( Image1.Picture.Graphic as TGIFImage ).Animate := True;
3- و در نهایت لود فایل gif مورد نظر در زمان اجرا.


اما برنامه با خطا مواجه میشه. لطفا اگر دلیلش رو می دونید منو در جریان بذارید:
خطا:
invalid class typecast

hamedjim
یک شنبه 23 خرداد 1395, 23:57 عصر
من با کد زیر برنامه رو بدون خطا اجرا می کنم. اما تنها فریم اول فایل Gif نمایش داده میشه.
روش اولی که استفاده کردم (پست قبل)، همراه با خطا بود. این روش هم که تصاویر متحرک رو نشون نمیده. لطفا راهنمایی کنید چطور تصاویر متحرک رو در فرمم نمایش بدم.


GifImage:= TGifImage.Create;
GifImage.Animate:=True;
GifImage.LoadFromFile(Path + Name);
Image1.Picture.Graphic.Assign(GifImage);

Mahmood_M
دوشنبه 24 خرداد 1395, 02:14 صبح
مشکل روش اول اینه که شما TypeCast رو قبل از Load کردن فایل انجام میدید
وقتی فایل gif درون Image وارد نشده، خاصیت Graphic اون مقدار Nil داره و نمی تونه به عنوان TGifImage درنظر گرفته بشه و اگر در ابتدای کار فایل تصویری دیگه ای که از نوع Gif نیست، داخل Image وارد شده باشه، خاصیت Graphic با توجه به نوع اون تصویر مقدار دهی میشه، مثلا Bitmap یا JPegImage یا PNGImage یا ...
خاصیت Graphic بعد از قرار دادن تصویر مقدار دهی میشه و با توجه به فرمت تصویر خصوصیات متفاوتی داره
با توجه به این موارد وقتی هنوز فایل Gif درون Image قرار داده نشده، خاصیت Graphic خصوصیات یک TGifImage رو نداره و TypeCast کردن اون به TGifImage با خطا مواجه میشه
فایل gif رو ابتدا مانند سایر تصاویر Load کنید و بعد TypeCast کنید :

Image1.Picture.LoadFromFile('MyFile.gif');
(Image1.Picture.Graphic as TGIFImage).Animate := True;
در روش دوم باید Assign رو روی Picture انجام بدید، نه روی Graphic ، مثال :

G := TGIFImage.Create;
G.Animate := True;
G.LoadFromFile('MyFile.gif');
Image1.Picture.Assign(G);
وقتی یک کلاسی رو Assign می کنید، کلاس مقصد خصوصیاتش رو از کلاس مبدا کپی می کنه
حدس میزنم که قبل از Load فایل gif ، یک فایل JPG یا BMP یا PNG یا هر فایل تصویری غیر متحرکی درون Image قرار داره، در این صورت مقدار خاصیت Graphic مثلا از نوع Bitmap یا PNGImage یا ... هستش، وقتی Assign روی این کلاس انجام میشه، اطلاعات مربوط به همه ی فریمها و متحرک بودن تصویر کپی نمیشه و فقط تصویر فریم اول به عنوان یک تصویر ثابت کپی میشه، چون داریم یک کلاس مثلا Bitmap رو پر می کنیم، نه یک TGifImage رو
اگر Assign رو روی Picture انجام بدید، مقدار خاصیت Graphic دوباره مقداردهی میشه و خصوصیات TGifImage رو خواهد داشت و تصویرتون به عنوان یک فایل گیف Load میشه
البته روش ساده تر همون روش اوله، فقط باید TypeCast رو بعد از Load تصویر انجام بدید

hamedjim
دوشنبه 24 خرداد 1395, 07:35 صبح
آقا محمود واقعا ممنون.
با توضیحاتی که دادید، هر دو روش به خوبی عمل کرد.
خیلی خیلی خیلی ممنون.:تشویق: