イメージを表示するカスタムコントロールがあります。画像の周りには、各コーナーに4つのサイズのグリップがあります。ユーザがカーソルをサイズグリップに移動させると、アスペクト比を維持したまま画像のサイズを変更できるはずです。私はそれに任意の値を渡すことができ、アスペクト比が維持されるため、それ自体でマウスで画像のサイズを変更し、縦横比を維持
public void Resize(float value)
{
if (value == 0f)
value = 0.05f;
//Resize by the same value to keep aspect ratio
var width = (int)(frame.Width * value);
var height = (int)(frame.Height * value);
//Image resizing removed...
}
Resize
方法が動作している:
Iはすでに動作リサイズ方法を有しています。 width
とheight
の両方を使用し、同じ値でサイズを変更します。
問題は、サイズグリップの1つを移動することによるサイズ変更が期待通りに機能していないことです。また、画像のアスペクト比が失われます。私が持っているMouseMove
イベントでは:マウスカーソルを移動してサイズ変更をしようとすると
if (e.Button == MouseButtons.Left)
{
//Get mouse position delta
var x = mousePosition.X - e.Location.X;
var y = mousePosition.Y - e.Location.Y;
if (x == 0 && y == 0)
return;
bool doY = false;
var diff = x;
if (x == 0 && y != 0)
{
diff = y;
doY = true;
}
float width = frame.Width + diff;
float amount = frame.Width/width;
if (doY)
{
float height = frame.Height + diff;
amount = frame.Height/height;
}
Resize(amount);
}
、アスペクト比が尊重されていません。上記のコードでは、x
またはy
に変更があったかどうかを判断し、変更された値に応じてサイズ変更の値を決定します。
正しいx
とy
デルタを取得し、移動するグリップに応じてアスペクト比を維持しながら画像のサイズを変更するより良い方法はありますか?
"期待どおりに動作しない"とはどういう意味ですか?また、それについて考える "var x = mousePosition.X - e.Location.X;"私は "var x = Math.Abs(mousePosition.X - e.Location.X);"を使用します。 動作していないwhatsと、サイズグリップが機能していない場合は、もっと多くのコードを追加してくれますか? – MrApnea
@FSDanielはい 'x'は負の数にすることができます。これは、グリップがドラッグされているサイズに応じてフレームのサイズが小さくなることを意味します。サイズグリップは、フレームの角に描かれた単純な矩形であり、矩形の上に 'Contains'メソッドを呼び出すことによってどのグリップがドラッグされているかを確認します。 –