Martifan Опубликовано 22 августа, 2016 Опубликовано 22 августа, 2016 доброго времени сутки подскажите пожалуйста как запустить GIF файл? чтобы анимацию показывала заранее спасибо Цитата
0 Tumaso Опубликовано 27 ноября, 2018 Опубликовано 27 ноября, 2018 А исправленный вариант под Windows корректно ли отображает вашу проблемную гифку??? Цитата
0 FREEFAR Опубликовано 27 ноября, 2018 Опубликовано 27 ноября, 2018 1 час назад, Roma77751 сказал: ПРОБЛЕМА РЕШЕНА! Всем спасибо, отдельное спасибо dnekrasov и IVGSoft, натолкнули на верную мысль. Только менять переменные надо было тут Begin Stream.Read(RGBEntry, SizeOf(RGBEntry)); With APalette do begin B := RGBEntry.R or (RGBEntry.R shl 8); G := RGBEntry.G or (RGBEntry.G shl 8); R := RGBEntry.B or (RGBEntry.B shl 8); A := $FF; end; видимо китайцы что то напутали...?"> Прикрепляю исправленный исходник. FMX.GifUtils.rar ай да картинка - аж пива захотелось) ) Цитата
0 dnekrasov Опубликовано 27 ноября, 2018 Опубликовано 27 ноября, 2018 1 час назад, Roma77751 сказал: ПРОБЛЕМА РЕШЕНА! Всем спасибо, отдельное спасибо dnekrasov и IVGSoft, натолкнули на верную мысль. Только менять переменные надо было тут Begin Stream.Read(RGBEntry, SizeOf(RGBEntry)); With APalette do begin B := RGBEntry.R or (RGBEntry.R shl 8); G := RGBEntry.G or (RGBEntry.G shl 8); R := RGBEntry.B or (RGBEntry.B shl 8); A := $FF; end; А Вы под Windows проверили? Теперь у меня (с Вашим исходником) цвета R и B поменялись. Да и вообще, что-то мне совсем непонятна такая запись B := RGBEntry.R or (RGBEntry.R shl 8); т.е. тут байту присваивается двухбайтное значение. Да и проблема, как мне кажется, здесь в том, что при объявлении TInternalColor учитывается порядок байт (Big-Endian или нет), а вот в объявлении TGifRGB - нет. Цитата
0 Roma77751 Опубликовано 27 ноября, 2018 Опубликовано 27 ноября, 2018 В 23.08.2016 в 04:55, Martifan сказал: доброго времени сутки подскажите пожалуйста как запустить GIF файл? чтобы анимацию показывала заранее спасибо подключаешь исправленный модуль Gif: tgifplayer; // объявляешь переменную procedure TForm1.FormCreate(Sender: TObject); begin Gif:= TGifPlayer.Create(Self);//создаешь Gif.Image := Image1;//указываешь где будет отображаться gif-ка Gif.LoadFromFile(Tpath.Combine(TPath.GetDocumentsPath, 'filename'));// указываешь путь к файлу в данном случае на андроид папка assets\internal...если файл во внешнем доступе(просто \assets)пишешь путь Gif.LoadFromFile(Tpath.Combine(TPath.GetSharedDocumentsPath, 'filename')); gif.Play;//воспроизводишь end; Цитата
0 Roma77751 Опубликовано 27 ноября, 2018 Опубликовано 27 ноября, 2018 34 минуты назад, Tumaso сказал: А исправленный вариант под Windows корректно ли отображает вашу проблемную гифку??? я не проверял, мне надо под андроидом чтобы работало....под виндой корректно отображались эти гифки и с тем кодом...без исправлений Цитата
0 Roma77751 Опубликовано 27 ноября, 2018 Опубликовано 27 ноября, 2018 13 минут назад, FREEFAR сказал: ай да картинка - аж пива захотелось) ) А я взял сегодня пивка Цитата
0 Roma77751 Опубликовано 27 ноября, 2018 Опубликовано 27 ноября, 2018 13 минут назад, dnekrasov сказал: А Вы под Windows проверили? Теперь у меня (с Вашим исходником) цвета R и B поменялись. Да и вообще, что-то мне совсем непонятна такая запись B := RGBEntry.R or (RGBEntry.R shl 8); т.е. тут байту присваивается двухбайтное значение. Да и проблема, как мне кажется, здесь в том, что при объявлении TInternalColor учитывается порядок байт (Big-Endian или нет), а вот в объявлении TGifRGB - нет. под виндой не проверял. Но так и думал что цвета поменяются, этот код(неисправленный) под виндой норм все отображал, а под андроидом криво....с одним и тем же кодом...получается если мы тупо в коде поменяли цвета, то сейчас наверное под виндой все синее... у меня конкретно была проблема с андроидом, это решение видимо не самое оптимальное, но меня устраивает....если есть желание давайте попробуем разобраться с этим...я за!) dnekrasov 1 Цитата
0 dnekrasov Опубликовано 27 ноября, 2018 Опубликовано 27 ноября, 2018 (изменено) 43 минуты назад, Roma77751 сказал: если есть желание давайте попробуем разобраться с этим...я за!) Давайте TInternalColor = packed record case Integer of 0: {$IFDEF BIGENDIAN} (A, R, G, B: System.Byte); {$ELSE} (B, G, R, A: System.Byte); {$ENDIF} 1: (Color: TAlphaColor); end; ... TGifRGB = packed record {$IFDEF BIGENDIAN} B, G, R: Byte; {$ELSE} R, G, B: Byte; {$ENDIF} end; ... procedure ReadPalette(Stream: TStream; Size: Integer; var APalette: TPalette); var RGBEntry: TGifRGB; I: Integer; c: TInternalColor; begin SetLength(APalette, Size); for I := 0 To Size - 1 Do begin Stream.Read(RGBEntry, SizeOf(RGBEntry)); with APalette[I] do begin R := RGBEntry.R; G := RGBEntry.G; B := RGBEntry.B; A := $FF; end; end; end; Попробуйте заменить объявления типов и чтение палитры (то, что Вы меняли). На винде в таком виде работает правильно. Если на Android тоже будет всё ок, то можно считать, что теперь всё в порядке. Изменено 27 ноября, 2018 пользователем dnekrasov Цитата
0 FREEFAR Опубликовано 27 ноября, 2018 Опубликовано 27 ноября, 2018 52 минуты назад, Roma77751 сказал: под виндой не проверял. Но так и думал что цвета поменяются, этот код(неисправленный) под виндой норм все отображал, а под андроидом криво....с одним и тем же кодом...получается если мы тупо в коде поменяли цвета, то сейчас наверное под виндой все синее... у меня конкретно была проблема с андроидом, это решение видимо не самое оптимальное, но меня устраивает....если есть желание давайте попробуем разобраться с этим...я за!) на иОС тоже порядок Цитата
0 Roma77751 Опубликовано 27 ноября, 2018 Опубликовано 27 ноября, 2018 18 минут назад, FREEFAR сказал: на иОС тоже порядок это не может не радовать) на иос мне надо тоже чтобы гифки отображались корректно Цитата
0 Roma77751 Опубликовано 27 ноября, 2018 Опубликовано 27 ноября, 2018 (изменено) 59 минут назад, dnekrasov сказал: Давайте TInternalColor = packed record case Integer of 0: {$IFDEF BIGENDIAN} (A, R, G, B: System.Byte); {$ELSE} (B, G, R, A: System.Byte); {$ENDIF} 1: (Color: TAlphaColor); end; ... TGifRGB = packed record {$IFDEF BIGENDIAN} B, G, R: Byte; {$ELSE} R, G, B: Byte; {$ENDIF} end; ... procedure ReadPalette(Stream: TStream; Size: Integer; var APalette: TPalette); var RGBEntry: TGifRGB; I: Integer; c: TInternalColor; begin SetLength(APalette, Size); for I := 0 To Size - 1 Do begin Stream.Read(RGBEntry, SizeOf(RGBEntry)); with APalette[I] do begin R := RGBEntry.R; G := RGBEntry.G; B := RGBEntry.B; A := $FF; end; end; end; Попробуйте заменить объявления типов и чтение палитры (то, что Вы меняли). На винде в таком виде работает правильно. Если на Android тоже будет всё ок, то можно считать, что теперь всё в порядке. попробовал. результат отрицательный. Опять все синее... на андроид Изменено 27 ноября, 2018 пользователем Roma77751 Цитата
0 beegl Опубликовано 18 января, 2019 Опубликовано 18 января, 2019 привет, подскажите, как загрузить и воспроизвесть GIF, "вшитый" в APK файле, чтоб не открывать из директории, .. вот это не действует: procedure TForm4.FormCreate(Sender: TObject); begin FGifPlayer := TGifPlayer.Create(Self); FGifPlayer.Image := Image1; end;[/CODE] Цитата
0 FREEFAR Опубликовано 19 января, 2019 Опубликовано 19 января, 2019 В 18.01.2019 в 09:08, beegl сказал: привет, подскажите, как загрузить и воспроизвесть GIF, "вшитый" в APK файле, чтоб не открывать из директории, .. вот это не действует: procedure TForm4.FormCreate(Sender: TObject); begin FGifPlayer := TGifPlayer.Create(Self); FGifPlayer.Image := Image1; end;[/CODE] а если положить в ресурсы? Цитата
0 beegl Опубликовано 22 января, 2019 Опубликовано 22 января, 2019 (изменено) В 19.01.2019 в 13:17, FREEFAR сказал: а если положить в ресурсы? Подскажите, включение-своих-файлов - Remote Patch - assets\internal указать или что лучше, чтоб подхватить FGifPlayer.Image := Image1; ? FGifPlayer.LoadFromFile(System.IOUtils.TPath.Combine (System.IOUtils.TPath.GetDocumentsPath, 'GIF_Res.gif')); Изменено 22 января, 2019 пользователем beegl Цитата
0 Stasis Опубликовано 22 ноября, 2023 Опубликовано 22 ноября, 2023 Почему-то не работает в делфи 11. Если создать проэкт с нуля в 11 версии, прикрепить к ней этот pas файл и запустить, то image вообще ничего не подгружает. Но если запустить готовый китайский проэкт, то все норм Цитата
Вопрос
Martifan
доброго времени сутки
подскажите пожалуйста как запустить GIF файл? чтобы анимацию показывала
заранее спасибо
40 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.