質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

4772閲覧

xamlにimageとして表示されている画像を回転させる

ajaj

総合スコア12

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

1グッド

0クリップ

投稿2021/06/15 14:17

編集2021/06/15 14:20

現在、C#、WPFを使ってwindowsアプリを作っています。(visualstudio2019, wpf, .NET5.0)

https://vdlz.xyz/Csharp/WPF/Control/Image/Image.html

上記の方のサイトを参考にして、canvas上の、image範囲に、画像を挿入して、描画するところまでできました。

しかし、画像によっては期待した方向で描画されないため、期待する方向に画像が描画されないときにクリックすると画像が回転する関数を作りたいと考えました。

調べてみるとRotateFlipとRotateFlipTypeが必要と分かり、実装してみました。

C#

1private void kaitennn(object sender, RoutedEventArgs e) 2 { //⇂はxamlのimageのNameです。 3 Bmpimage.RotateFlip(RotateFlipType.Rotate180FlipNone); 4 }

しかし、私の環境ではRotateFlipなどが「using,アセンブリ参照が不足している。見当たらない」とエラーが出ます。クラス等の探し方を検索するとオブジェクトブラウザーを見るように言っている方もいたので、検索してみましたがそもそも見当たりませんでした。

それかimageネームを渡していることがそもそもの間違いでしょうか?

私自身、問題点がどこかはっきりしない部分もありますが、どうかよろしくお願いします。

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

RotateFlipはWinFormsのメソッドですので、WPFでは(基本的には)使えません。
Image.RotateFlip(RotateFlipType) メソッド (System.Drawing) | Microsoft Docs

読み込み時に適切に回したい場合は、こちらが参考になりそうです(動作確認はしていません)
C# WPF Exifの回転情報を取得して画像を表示する - Qiita

ボタン操作等で自分で回したい場合は、RotateTransformがいいでしょう。
RotateTransform クラス (System.Windows.Media) | Microsoft Docs

回転以外にもいろいろできます。
変換の概要 - WPF .NET Framework | Microsoft Docs

xml

1<Window 2 x:Class="Questions344215.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 Width="300" 6 Height="300"> 7 <Grid> 8 <Border 9 HorizontalAlignment="Center" 10 VerticalAlignment="Top" 11 BorderBrush="Black" 12 BorderThickness="1"> 13 <Image 14 Width="133" 15 Height="95" 16 MouseDown="kaitennn" 17 Source="https://teratail-v2.storage.googleapis.com/uploads/avatars/u13/132786/KnkDDC5A_thumbnail.jpg" 18 Stretch="Fill"> 19 <!-- レイアウトに影響してボーダーもサイズが変わる --> 20 <Image.LayoutTransform> 21 <RotateTransform x:Name="rotateTransform1" /> 22 </Image.LayoutTransform> 23 </Image> 24 </Border> 25 26 <Border 27 HorizontalAlignment="Center" 28 VerticalAlignment="Bottom" 29 BorderBrush="Black" 30 BorderThickness="1"> 31 <Image 32 Width="133" 33 Height="95" 34 MouseDown="kaitennnnn" 35 RenderTransformOrigin="0.5,0.5" 36 Source="https://teratail-v2.storage.googleapis.com/uploads/avatars/u13/132786/KnkDDC5A_thumbnail.jpg" 37 Stretch="Fill"> 38 <!-- こちらはレイアウトには影響せず見た目だけ回転 --> 39 <Image.RenderTransform> 40 <RotateTransform x:Name="rotateTransform2" /> 41 </Image.RenderTransform> 42 </Image> 43 </Border> 44 </Grid> 45</Window>

cs

1using System.Windows; 2 3namespace Questions344215 4{ 5 public partial class MainWindow : Window 6 { 7 public MainWindow() => InitializeComponent(); 8 9 private void kaitennn(object sender, RoutedEventArgs e) 10 => rotateTransform1.Angle += 90; 11 12 private void kaitennnnn(object sender, RoutedEventArgs e) 13 => rotateTransform2.Angle += 90; 14 } 15}

アプリ画像
上はLayoutTransformでの回転。レイアウトにも影響します。
Borderごと回転しているわけではなく、Imageの回転によってBorderサイズが変わりました。

下はRenderTransformでの回転。レイアウトに影響しません。
BorderImageが回っていることに気付かずそのまま。Imageもはみ出たり重なったりします。

問題がなければRenderTransformのほうが軽いです。
レイアウトが崩れて困った場合は、LayoutTransformを使用します。

投稿2021/06/15 21:24

編集2023/07/27 15:32
TN8001

総合スコア9801

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ajaj

2021/06/15 22:54

だいぶ基本的なところで違ってましたね。 これから実装したいと思います! 参考サイトも提示していただきありがとうございます!
ajaj

2021/06/16 06:09

実装が完了しました。 改めて、丁寧な解説、参考になるコードまで作成していただき感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問