画像用表示領域に画像を中央に最大で表示する
今回は、画像を中央に、かつ最大になるように表示したいと思います。画像の表示する市と大きさを計算する関数を作ります。Formやpanelなど高さや幅は、整数なので、比率を計算する都合上、floatに変換して置きます。
private static List<int> ImageSize(int pan_h, int pan_w, int picture_h, int picture_w)
{
List<int> size_position = new List<int>();
int position_h;
int position_w;
int image_h;
int image_w;
float panel_h = (float)pan_h; 表示領域の高さをfloatに変換する
float panel_w = (float)pan_w; 表示領域の幅をfloatに変換する
float Percentage1 = panel_h / panel_w;
float pict_h = (float)picture_h; 画像の高さをfloatに変換する
float pict_w = (float)picture_w; 画像の幅をfloatに変換する
float Percentage2 = pict_h / pict_w;
if (Percentage1 < Percentage2)
{
if (pict_h < panel_h)
{
position_h = pan_h / 2 - picture_h / 2;
position_w = pan_w / 2 - picture_w / 2;
image_h = picture_h;
image_w = picture_w;
}
else
{
position_h = 0;
position_w = pan_w / 2 - (int)(pict_w / 2 * panel_h / pict_h);
image_h = pan_h;
image_w = (int)(pict_w * panel_h / pict_h);
}
}
else
{
if (pict_w < panel_w)
{
position_h = pan_h / 2 - picture_h / 2;
position_w = pan_w / 2 - picture_w / 2;
image_h = picture_h;
image_w = picture_w;
}
else
{
position_h = pan_h / 2 - (int)(pict_h / 2 * panel_w / pict_w);
position_w = 0;
image_h = (int)(pict_h * panel_w / pict_w);
image_w = pan_w;
}
}
size_position.Add(position_w); 計算されたX軸上の位置をリストに加える
size_position.Add(position_h);; 計算されたy軸上の位置をリストに加える
size_position.Add(image_w); 計算された画像の幅をリストに加える
size_position.Add(image_h); 計算された画像の高さをリストに加える
return size_position;戻り値は位置、大きさの情報を含む
}
imagesize = ImageSize(表示領域の高さ, 表示領域の幅, 画像の幅, 画像の高さ);
pictureBox1.Location = new Point(imagesize[0], imagesize[1]);位置は。左側上部を指定する
pictureBox1.Size = new Size(imagesize[2], imagesize[3]);画像の大きさ
pictureBox1に位置と大きさを指定して表示させたところ。
pictureBox1.Show();
コメント