Apa jenis kontrol yang harus saya gunakan - Image
, MediaElement
, dll?
.net
wpf
animated-gif
cakar besi
sumber
sumber
Jawaban:
Saya tidak bisa mendapatkan jawaban paling populer untuk pertanyaan ini (di atas oleh Dario) agar berfungsi dengan baik. Hasilnya aneh, animasi berombak dengan artefak aneh. Solusi terbaik yang saya temukan sejauh ini: https://github.com/XamlAnimatedGif/WpfAnimatedGif
Anda dapat menginstalnya dengan NuGet
PM> Install-Package WpfAnimatedGif
dan untuk menggunakannya, di namespace baru ke Window di mana Anda ingin menambahkan gambar gif dan menggunakannya seperti di bawah ini
Paketnya sangat rapi, Anda bisa mengatur beberapa atribut seperti di bawah ini
dan Anda dapat menggunakannya dalam kode Anda juga:
EDIT: Dukungan Silverlight
Sesuai komentar josh2112 jika Anda ingin menambahkan dukungan GIF animasi ke proyek Silverlight Anda, gunakan github.com/XamlAnimatedGif/XamlAnimatedGif
sumber
img
disiniSaya memposting solusi memperluas kontrol gambar dan menggunakan Gif Decoder. Decoder gif memiliki properti frames. Saya menghidupkan
FrameIndex
properti. AcaraChangingFrameIndex
mengubah properti sumber ke bingkai yang sesuai denganFrameIndex
(yang ada di dekoder). Saya kira gif memiliki 10 frame per detik.Contoh penggunaan (XAML):
sumber
Int32AnimationUsingKeyFrames
gf.Frames[0].MetaData.GetQuery("/grctlext/Delay")
(mengembalikan ushort yang merupakan durasi bingkai dalam ratusan detik)Saya juga melakukan pencarian dan menemukan beberapa solusi berbeda hanya dalam utas di forum MSDN lama. (tautan tidak lagi berfungsi jadi saya menghapusnya)
Yang paling sederhana untuk dieksekusi tampaknya menggunakan
PictureBox
kontrol WinForms , dan berjalan seperti ini (mengubah beberapa hal dari utas, sebagian besar sama).Menambahkan referensi ke
System.Windows.Forms
,WindowsFormsIntegration
danSystem.Drawing
untuk proyek Anda pertama.Kemudian di
Window_Loaded
handler, Anda akan mengaturpictureBoxLoading.ImageLocation
properti ke jalur file gambar yang ingin Anda tampilkan.The
MediaElement
kontrol disebutkan di thread itu, tetapi juga disebutkan bahwa itu adalah kontrol agak berat, jadi ada beberapa alternatif, termasuk setidaknya 2 kontrol yg dibuat berdasarkan padaImage
kontrol, jadi ini adalah yang paling sederhana.sumber
AllowTransparency="True"
. Apakah itu akan menghasilkan hasil yang Anda pikirkan atau tidak adalah masalah lain. Saya sendiri belum mencobanya, tetapi saya berani bertaruh bahwaWindowsFormsHost
itu tidak akan transparan sama sekali. SisaWindow
kekuatan. Anda hanya harus mencobanya, saya pikir.Bagaimana dengan aplikasi mungil ini: Kode di belakang:
XAML:
sumber
<MediaElement LoadedBehavior="Play" Source="{Binding MyGifFile}" >
- MyGifFile hanya nama file (dan jalur) dari gif animasi saya.ListBox
, atau mengikat sama sekali? Saya mencobanya tanpa mengikat, cukup letakkan file path di Source dan muncul, tetapi tidak menghidupkan. Jika saya menggunakan penjilidan, bahkan denganListBox
, itu tidak muncul sama sekali, bagi saya - itu akan memberi saya pengecualian bahwa jalur file saya salah, meskipun itu sama dengan yang saya gunakan ketika muncul.Sangat sederhana jika Anda menggunakan
<MediaElement>
:sumber
public string SpinnerLogoPath => Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Assets\images\mso_spinninglogo_blue_2.gif");
. Pastikan untuk mengatur file ke Build = Konten dan salin ke direktori output.Ini adalah versi saya dari kontrol gambar animasi. Anda dapat menggunakan Sumber properti standar untuk menentukan sumber gambar. Saya semakin memperbaikinya. Saya seorang Rusia, proyek adalah bahasa Rusia jadi komentar juga dalam bahasa Rusia. Tapi bagaimanapun Anda harus bisa memahami semuanya tanpa komentar. :)
sumber
Saya menggunakan perpustakaan ini: https://github.com/XamlAnimatedGif/WpfAnimatedGif
Pertama, instal perpustakaan ke proyek Anda (menggunakan Package Manager Console):
Lalu, gunakan potongan ini ke file XAML:
Semoga membantu.
Sumber: https://github.com/XamlAnimatedGif/WpfAnimatedGif
sumber
Pada dasarnya solusi PictureBox yang sama di atas, tetapi kali ini dengan kode-belakang untuk menggunakan Sumber Daya Tertanam dalam proyek Anda:
Dalam XAML:
Di Balik Kode:
sumber
Saya memodifikasi kode Mike Eshva, Dan saya membuatnya bekerja lebih baik. Anda dapat menggunakannya dengan 1frame jpg png bmp atau mutil-frame gif. Jika Anda ingin mengikat uri ke kontrol, ikat properti UriSource atau Anda ingin ikat di aliran memori yang Anda ikat propertie Sumber yang merupakan BitmapImage.
Ini adalah kontrol khusus. Anda perlu membuatnya di WPF App Project, dan menghapus Template override dengan gaya.
sumber
Saya memiliki masalah ini, sampai saya menemukan bahwa di WPF4, Anda dapat mensimulasikan animasi gambar keyframe Anda sendiri. Pertama, pisahkan animasi Anda menjadi serangkaian gambar, beri judul sesuatu seperti "Image1.gif", "Image2, gif", dan sebagainya. Impor gambar-gambar itu ke sumber daya solusi Anda. Saya berasumsi Anda menempatkannya di lokasi sumber daya default untuk gambar.
Anda akan menggunakan kontrol Gambar. Gunakan kode XAML berikut. Saya telah menghapus yang tidak penting.
sumber
Terima kasih atas posting Anda, Joel, ini membantu saya mengatasi tidak adanya dukungan WPF untuk GIF animasi. Hanya menambahkan sedikit kode sejak saya bersenang-senang dengan menyetel properti pictureBoxLoading.Image karena api Winforms.
Saya harus mengatur animasi gif gambar Build Action saya sebagai "Konten" dan direktori Salin ke keluaran ke "Salin jika lebih baru" atau "selalu". Kemudian di MainWindow () saya memanggil metode ini. Satu-satunya masalah adalah ketika saya mencoba untuk membuang aliran, itu memberi saya grafik amplop merah, bukan gambar saya. Saya harus menyelesaikan masalah itu. Ini menghilangkan rasa sakit saat memuat BitmapImage dan mengubahnya menjadi Bitmap (yang jelas membunuh animasi saya karena tidak lagi menjadi gif).
sumber
.ImageLocation
bukan.Image
. Dia memiliki metode yang salah..ImageLocation
bekerja dari root proyek Visual Studio, jadi katakan Anda memilikiImages
folder, jalur Anda kemudianimgBox.ImageLocation = "/Images/my.gif";
. Jika Anda memiliki folder bernamaViews
mana Anda memiliki View yang akan menampilkan gambar, untuk mendapatkan kembali keImages
, Anda harus menggunakan 2 titik:imgBox.ImageLocation = "../Images/my.gif";
.Saya telah mencoba semua cara di atas, tetapi masing-masing memiliki kekurangan, dan terima kasih kepada Anda semua, saya mengerjakan GifImage saya sendiri:
Pemakaian:
Karena tidak akan menyebabkan memori bocor dan membuat garis waktu gambar gif menjadi animasi, Anda dapat mencobanya.
sumber
IsAutoStart
, tetapi jika tidak, bekerja seperti juara!Sebelumnya, saya menghadapi masalah yang sama, saya perlu memutar
.gif
file di proyek Anda. Saya punya dua pilihan:menggunakan PictureBox dari WinForms
menggunakan perpustakaan pihak ketiga, seperti WPFAnimatedGif dari codeplex.com.
Versi dengan
PictureBox
tidak berfungsi untuk saya, dan proyek tidak dapat menggunakan perpustakaan eksternal untuk itu. Jadi saya membuatnya sendiriBitmap
dengan bantuanImageAnimator
. Karena, standarBitmapImage
tidak mendukung pemutaran.gif
file.Contoh lengkap:
XAML
Code behind
Bitmap
tidak mendukung arahan URI , jadi saya memuat.gif
file dari direktori saat ini.sumber
Perbaikan kecil
GifImage.Initialize()
metode, yang membaca timing frame yang tepat dari metadata GIF.sumber
Saya tidak yakin apakah ini telah dipecahkan tetapi cara terbaik adalah dengan menggunakan pustaka WpfAnimatedGid . Sangat mudah, sederhana dan mudah digunakan. Ini hanya membutuhkan 2 baris kode XAML dan sekitar 5 baris Kode C # dalam kode di belakang.
Anda akan melihat semua detail yang diperlukan tentang bagaimana ini dapat digunakan di sana. Inilah yang juga saya gunakan alih-alih menciptakan kembali roda
sumber
Menambahkan ke respons utama yang merekomendasikan penggunaan WpfAnimatedGif , Anda harus menambahkan baris berikut pada akhirnya jika Anda menukar gambar dengan Gif untuk memastikan animasi benar-benar dijalankan:
Jadi kode Anda akan terlihat seperti:
sumber
Periksa kode saya, saya harap ini membantu Anda :)
atau
sumber
Alternatif untuk menunggu animasi di WPF adalah:
Ini akan menampilkan bilah kemajuan animasi.
sumber