TransformedBitmapImage i zapisanie go WPF

TransformedBitmapImage i zapisanie go WPF
QA
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Lokalizacja:Tychy
  • Postów:45
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

Kopiuj
Expo.Source 

nie jest ustawiona i pytanie moje jest dlaczego?

Tutaj owa funkcja:

Kopiuj
      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?

Sarrus
  • Rejestracja:prawie 14 lat
  • Ostatnio:6 dni
  • Postów:2512
0

Twoje drugie pytanie tłumaczy pierwsze:

Kopiuj
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:

Kopiuj
Expo.Source as BitmapSource;

?

edytowany 4x, ostatnio: Sarrus
Zobacz pozostałe 2 komentarze
QA
Twój sposób nie przejdzie bo kompilator nie widzi takiej przestrzeni nazw.
Sarrus
Nie rozumiem. Jakiego typu jest Expo.Source?
QA
to jest kontrolka Image
Sarrus
wszędzie jest używany typ ImageSource, po co to rzutujesz na BitmapImage?
QA
No bo potrzebuje BitmapImage w tym fragmencie kodu: transformBmp.Source = bmpImage; Jeżeli tego nie przekonwerteruje to w tym miejscu,, które Ci wskazałem pojawia sie znowu problem z konwersja z BitmapImage na ImageSource
Sarrus
  • Rejestracja:prawie 14 lat
  • Ostatnio:6 dni
  • Postów:2512
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

edytowany 1x, ostatnio: Sarrus
QA
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Lokalizacja:Tychy
  • Postów:45
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

Kopiuj
 transformBmp.Source = bmpImage;

jest problem z rzutowaniem z ImageSource na BitmapImage

edytowany 1x, ostatnio: Qarku
Sarrus
  • Rejestracja:prawie 14 lat
  • Ostatnio:6 dni
  • Postów:2512
0

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

Kopiuj
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ć.

edytowany 1x, ostatnio: Sarrus
QA
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Lokalizacja:Tychy
  • Postów:45
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ść.

edytowany 1x, ostatnio: Qarku
QA
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Lokalizacja:Tychy
  • Postów:45
0

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

Sarrus
  • Rejestracja:prawie 14 lat
  • Ostatnio:6 dni
  • Postów:2512
0

Czyli tak nie działa?

Kopiuj
      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;
       }
QA
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Lokalizacja:Tychy
  • Postów:45
0

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

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 19 godzin
1

a Expo.Source as BitmapSource?

edytowany 1x, ostatnio: Azarien
QA
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Lokalizacja:Tychy
  • Postów:45
0

Ten sam blad

Sarrus
  • Rejestracja:prawie 14 lat
  • Ostatnio:6 dni
  • Postów:2512
1

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

Kopiuj
            // 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.

QA
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Lokalizacja:Tychy
  • Postów:45
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

Sarrus
  • Rejestracja:prawie 14 lat
  • Ostatnio:6 dni
  • Postów:2512
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.