teratail header banner
teratail header banner
質問するログイン新規登録
C#

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

1回答

714閲覧

解像度の変更で片方の値を変更するとそれに合わせてもう片方の値もアスペクト比に従って変更する方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0グッド

0クリップ

投稿2022/07/30 07:54

編集2022/07/30 09:14

0

0

提示コードですが以下のif文の中でX,yどちらかの値が変わったらそれに合わせてアスペクト比を維持たままもう片方の値を変えたいのですが以下のように実装したいのですがうまく実装できません、これはどうやるのでしょうか?アスペクト比をを算出するプログラムは作成したのですがこれを用いてどうやって実装するのでしょうか?

cs

1 2 3 private void textBoxWidth_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 4 { 5 6 FileData data = mainForm.getSelectFileData(); 7 float aspect = data.getHeight() / data.getWidth(); //アスペクト比 8 9 if (checkBoxLookAspect.CheckState == CheckState.Checked) 10 { 11 int width = data.getWidth() - int.Parse(textBoxWidth.Text); 12 data.setHeight(data.getHeight() - width); 13 14 textBoxHeight.Text = data.getHeight().ToString(); 15 } 16 else 17 { 18 int width = int.Parse(textBoxWidth.Text); 19 data.setWidth(width); 20 textBoxWidth.Text = data.getWidth().ToString(); 21 } 22 } 23 24 private void textBoxHeight_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 25 { 26 FileData data = mainForm.getSelectFileData(); 27 float aspect = data.getHeight() / data.getWidth(); //アスペクト比 28 29 if (checkBoxLookAspect.CheckState == CheckState.Checked) 30 { 31 int height = data.getHeight() - int.Parse(textBoxHeight.Text); 32 data.setWidth(data.getWidth() - height); 33 34 textBoxWidth.Text = data.getWidth().ToString(); 35 } 36 else 37 { 38 int height = int.Parse(textBoxHeight.Text); 39 data.setHeight(height); 40 textBoxHeight.Text = data.getHeight().ToString(); 41 } 42 } 43 44
アスペクト比を算出するプログラム

cs

1public class Program 2{ 3 public static int gcd(int x,int y) 4 { 5 if (y == 0) 6 { 7 return x; 8 } 9 10 return gcd(y, x % y); 11 } 12 13 public static void Main() 14 { 15 ImageMagick.MagickImage img = new ImageMagick.MagickImage("input.HEIC"); 16 17 /* 18 Console.WriteLine(img.Width); 19 Console.WriteLine(img.Height); 20 Console.WriteLine(img.Density.X); 21 Console.WriteLine(img.Density.Y); 22 */ 23 24 int r = gcd(img.Width, img.Height); 25 Console.WriteLine(r); 26 27 28 Console.WriteLine(img.Height / r); 29 Console.WriteLine(img.Width / r); 30 31 // Console.WriteLine(img.Height / img.Width); 32 // Console.WriteLine(img.Width / img.Height); 33 34 35 36 37 Console.ReadKey(); 38 } 39 40} 41

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

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

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

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

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

KOZ6.0

2022/07/30 09:59

数学というか算数レベルの問題です。 変更前を X1,Y1 変更後を X2,Y2 とすると X1÷Y1 = X2÷Y2 が成り立ちます。 ここから X2 = ?, Y2=? が求まります。
退会済みユーザー

退会済みユーザー

2022/07/30 11:19

すいませんもう少し詳細にいいですか?
guest

回答1

0

data.initWidth;
data.initHeight;
という画像の元の大きさを利用することにより実現できました。

cs

1 2 3 private void textBoxWidth_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 4 { 5 FileData data = mainForm.getSelectFileData(); 6 if (checkBoxLookAspect.CheckState == CheckState.Checked) 7 { 8 if (textBoxWidth.Text.All(char.IsDigit) == true) 9 { 10 int width = data.initWidth - int.Parse(textBoxWidth.Text); 11 data.setWidth(int.Parse(textBoxWidth.Text)); 12 data.setHeight((data.initHeight - width)); 13 textBoxHeight.Text = (data.initHeight - width).ToString(); 14 } 15 } 16 else 17 { 18 int width = int.Parse(textBoxWidth.Text); 19 data.setWidth(width); 20 textBoxWidth.Text = data.getWidth().ToString(); 21 } 22 } 23 24 private void textBoxHeight_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 25 { 26 FileData data = mainForm.getSelectFileData(); 27 if (checkBoxLookAspect.CheckState == CheckState.Checked) 28 { 29 if(textBoxHeight.Text.All(char.IsDigit) == true) 30 { 31 int height = data.initHeight - int.Parse(textBoxHeight.Text); 32 data.setWidth(data.initWidth - height); 33 data.setHeight(int.Parse(textBoxHeight.Text)); 34 textBoxWidth.Text = (data.initWidth - height).ToString(); 35 } 36 } 37 else 38 { 39 int height = int.Parse(textBoxHeight.Text); 40 data.setHeight(height); 41 textBoxHeight.Text = data.getHeight().ToString(); 42 } 43 } 44 45

投稿2022/07/30 11:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問