Multimedia ja leikepöytä - Pääteohjaus 9
Lisätään ohjelmaan videota ja ääntä sekä kopioidaan ja liitetään dataa leikepöydän välityksellä.
Video ja ääni
Videota ja ääntä voit liittää WPF-sovelluksiin MediaElement-kontrollilla ja MediaPlayer-objektilla. Näiden käyttämiseen voi tutustua lukemalla Multimedia Overview-artikkelin.
MediaElement
- Aloita uusi WPF-sovellus. Lisää XAMLiin MediaElement-elementti. Aseta MediaElementin source-propertyn arvoksi viittaus mallivideoon eli http://appro.mit.jyu.fi/gko/ohjaus/ohjaus9/malli.wmv tai johonkin omaan videotiedostoosi.
- Kokeile toimiiko ohjelmasi ja näkyykö video. Huomannet, että MediaElement ei vie lomakkeelta tilaa kuin vasta ohjelman ollessa käynnissä.
- Katso mallia artikkelista How to: Control a MediaElement (Play, Pause, Stop, Volume, and Speed) ja lisää lomakkeellesi painikkeet joilla voit pysäyttää videon ja käynnistää videon. Huomaa, että LoadedBehavior-ominaisuuden arvoksi pitää asettaa Manual. Voit myös kokeilla mitä tapahtuu jos et muuta LoadedBehaviorin arvoa ja yrität käyttää painikkeitasi.
- Kokeile mediaelementissä pelkkää ääntä videon sijaan. Voit käyttää mallitiedostoa tai vaikka jotain omaa mp3-tiedostoasi.
- Lisää sovellukseesi myös äänisäädin ja slider jolla voit hypätä videossa eri kohtaan.
- Kokeile videon transformointia. Lisää MediaElementin sisään seuraavat:
<MediaElement.LayoutTransform> <TransformGroup> <ScaleTransform ScaleX="1" ScaleY="1"/> <RotateTransform Angle="45"/> <SkewTransform AngleX="0" AngleY="0" /> </TransformGroup> </MediaElement.LayoutTransform> </MediaElement> - Kokeile miltä video nyt näyttää.
MediaPlayer
MediaPlayer-objekti pitää luoda ohjelmallisesti.
- Lisää lomakkeellesi Image-elementti ja anna sille järkevä nimi.
- Luo ohjelmakoodissa esim. ikkunan latauduttua MediaPlayer seuraavasti:
MediaPlayer player = new MediaPlayer(); // pitää luoda tapahtumankäsittelijä, joka hoitaa varsinaisen videon näyttämisen player.MediaOpened += new EventHandler(player_MediaOpened); player.Open(new Uri("videotiedoston osoite", UriKind.Absolute)); void player_MediaOpened(object sender, EventArgs e) { MediaPlayer player = (MediaPlayer)sender; VideoDrawing aVideoDrawing = new VideoDrawing(); // naturalvideowidth ja -height ei voida käyttää ennen kuin video on avattu // tässä pitää määritellä oikeassa suhteessa oleva Rect. aVideoDrawing.Rect = new Rect(0, 0, player.NaturalVideoWidth, player.NaturalVideoHeight); aVideoDrawing.Player = player; player.Play(); DrawingImage di = new DrawingImage(aVideoDrawing); this.oman_image_elementin_nimi.Source = di; } - Lisää lomakkeelle painikkeet joilla voit hallita videota.
Leikepöytä
- Luo uusi WPF-lomake. Lisää lomakkeelle RichTextBox- ja TextBlock-komponentit. Kirjoita kumpaankin jotain lorem ipsumia.
- Lisää lomakkeellesi Edit-menu ja sen alle Copy-valinta. Aseta Copy-valinta kopioimaan RichTextBoxissa valittuna oleva teksti leikepöydälle. RichTextBox-luokasta löytyy suoraan Copy- ja Paste-metodit. Yritä liittää kopioimasi teksti Microsoft Wordiin.
- Lisää Edit-menuun Paste-valinta, joka liittää tekstin RichTextBoxiin. Kopioi wordissa jokun tekstipätkä ja liitä se ohjelmaasi menun kautta. Kokeile Wordissa muotoilla tekstiä ja liittää muotoiltu teksti RichTextBoxiin.
- Tee sama toiminnallisuus kuin edellä mutta liittyen lomakkeellasi olevaan TextBlock-komponenttiin. Joudut nyt itse ohjelmoimaan leikepöytäoperaatiot.
Kopioiminen on tehtävä seuraavasti:
Clipboard.SetData(DataFormats.Text, textblockin_nimi.Text);
Yritä liittää wordiin TextBlockista kopioimasi teksti. - Oleellista on siis kertoa leikepöydälle minkämuotoista tietoa sinne laitetaan. Suoraan tuetut tyypit on kerrottu DataFormats-luokassa.
- Liittäessä täytyy tarkistaa, että saadaan toivottua tietotyyppiä. Yritä liittää wordista kopioitu teksti
TextBlock-komponenttiisi:
IDataObject iData = Clipboard.GetDataObject(); if (iData.GetDataPresent(DataFormats.Text)) { textBlockin_nimi.Text = (String)iData.GetData(DataFormats.Text); } - Lisää lomakkeellesi Image-komponentti. Käynnistä Paint-ohjelmalla. Piirrä paintilla pieni kuva ja kopioi se leikepöydälle.
Lisää ohjelmaasi painike, joka liittää leikepöydältä kuvan Image-komponenttiisi. Muista tarkistaa, että leikepöydällä on
Bitmap-tyyppistä tietoa! Valitettavasti WPF:ssä on tässä kohtaa hienoinen bugi eikä suora liittäminen Image.Sourceksi toimi vaan pitää tehdä seuraavaan tapaan:
var img = new System.Windows.Controls.Image(); var imgSrc = Clipboard.GetImage(); img.Source = new FormatConvertedBitmap(imgSrc,PixelFormats.Bgr32,null,0);
Lisää kokeiltavaa
Yritä hallita MediaElementiä Storyboardin avulla. Kts. How to: Control a MediaElement by Using a Storyboard
Voit lisätä tietoa leikepöydälle myös täysin omassa keksityssä muodossa. Oman muodon pitää kuitenkin olla serialisoitavissa.

Käyttäjien kommentit