TransformedBitmapImage i zapisanie go WPF

0

Witam,
mam problem ponieważ mam funkcje, która po kliknięciu obraca mi obraz, z tym że potrafi to zrobić tylko raz, chodzi o to że moge tylko raz użyć tej funkcji, bo gdy klikam kolejny raz żeby obrócić obraz to wyskakuje mi powiadomienie o wyjątku że właściwość obrazka w tym przypadku

Expo.Source 

nie jest ustawiona i pytanie moje jest dlaczego?

Tutaj owa funkcja:

      private void Rotate_90()
       {
           int Rotate_angle = 0;
           // Create the TransformedBitmap
           TransformedBitmap transformBmp = new TransformedBitmap();

           // Create a BitmapImage
           BitmapImage bmpImage = Expo.Source as BitmapImage;

           // Properties must be set between BeginInit and EndInit
           transformBmp.BeginInit();
           transformBmp.Source = bmpImage;
           RotateTransform transform = new RotateTransform(Rotate_angle+=90);
           transformBmp.Transform = transform;
           transformBmp.EndInit();

           // Set Image.Source to TransformedBitmap
           Expo.Source = transformBmp;
       }
 

A drugie moje pytanie jest takie, że chciałbym teraz taki obrazek obrócony zapisać ale nie mogę bo jest problem z rzutowaniem TransformedBitmapImage na BitmapImage i pytanie jak to zrobić takie rzutowanie z TransformedBitmapImage na BitmapImage?

0

Twoje drugie pytanie tłumaczy pierwsze:

Expo.Source as BitmapImage;

zwraca null gdyż w Expo.Source znajduje się typ nierzutowalny na Bitmap

EDIT:
Nie zgłębiałem tematu, ale gdybyś zrobił tak:

Expo.Source as BitmapSource;

?

0

Żeby nie dyskutować w komentarzach. Jeszcze raz dlaczego rzutujesz na BitmapImage skoro wszystko co robisz to przypisujesz do właściwości Source typu BitmapSource Czy jest coś więcej?

System.Windows.Controls.Image.Source
System.Windows.Media.Imaging.TransformedBitmap.Source

0

Nie tylko to co widać, to znaczy pobieram obrazek z kontrolki Image wrzucam do tej funkcji i obracam. A potrzebuje to w BitmapImage, bo jakbym nie miał tego w BitmapImage to w tym momencie znowuw tym miejscu

 transformBmp.Source = bmpImage;

jest problem z rzutowaniem z ImageSource na BitmapImage

0

No i właśnie w dokumentacji System.Windows.Media.Imaging.TransformedBitmap.Source jest jak byk:

public BitmapSource Source { get; set; }

że właściwość source jest typu BitmapSource, z którego dziedziczą i BitmapImage i TransformedBitmap. Może ja coś źle patrzę, więc proponuję: wyrzuć to rzutowanie i napisz mi jaki masz błąd, bo nie mogę tego zrozumieć.

0

Że nie mozna niejawnie przekonwertowac typu "System.Windows.Media.ImageSource" na "System.Windows.Media.Imaging.BitmapImage". Dokladdnie taki. Także ta konwersja musi być bo inaczej to nie chcesz przejść.

0

To jak w końcu rozwiązać ten problem?

0

Czyli tak nie działa?

      private void Rotate_90()
       {
           int Rotate_angle = 0;
           // Create the TransformedBitmap
           TransformedBitmap transformBmp = new TransformedBitmap();
 
           // Properties must be set between BeginInit and EndInit
           transformBmp.BeginInit();
           transformBmp.Source = Expo.Source;
           RotateTransform transform = new RotateTransform(Rotate_angle+=90);
           transformBmp.Transform = transform;
           transformBmp.EndInit();
 
           // Set Image.Source to TransformedBitmap
           Expo.Source = transformBmp;
       }
0

Nie bo cały czas jest info ze nie można tego niejawnie przekonwertowac.

1

a Expo.Source as BitmapSource?

0

Ten sam blad

1

Nie pozostawiłeś mi wyboru i musiałem sprawdzić. To u mnie zadziałało:

            // Create the TransformedBitmap
            TransformedBitmap transformBmp = new TransformedBitmap();

            // Properties must be set between BeginInit and EndInit
            transformBmp.BeginInit();
            transformBmp.Source = (BitmapSource)Expo.Source;
            RotateTransform transform = new RotateTransform(90);
            transformBmp.Transform = transform;
            transformBmp.EndInit();

            // Set Image.Source to TransformedBitmap
            Expo.Source = transformBmp;

Pewnie miałeś taki błąd:
Error 1 Cannot implicitly convert type 'System.Windows.Media.ImageSource' to 'System.Windows.Media.Imaging.BitmapSource'. An explicit conversion exists (are you missing a cast?).
Nie zauważyłem, że Expo.Source jest typu ImageSource i trzeba rzutować na BitmapSource, ale mając taki błąd powinieneś od razu wiedzieć co robić.

PS. To co @Azarien napisał też działa.

0

Działa... Z tym że cały czas mnie dziwi co w takim razie ja robiłem że to nie działało. Wielkie dzięki

0

Właśnie nie wiadomo, bo Twój kod, ten zmieniony, pozostaje tajemnicą :P.

1 użytkowników online, w tym zalogowanych: 0, gości: 1