web-dev-qa-db-ja.com

PictureBoxに画像を合わせる

using (SqlConnection myDatabaseConnection = new SqlConnection(myConnectionString.ConnectionString))
{
    myDatabaseConnection.Open();
    using (SqlCommand SqlCommand = new SqlCommand("Select Photo from Employee where EmpID LIKE '%' + @EmpID + '%' ", myDatabaseConnection))
    {
        SqlCommand.Parameters.AddWithValue("@EmpID", textBox1.Text);
        DataSet DS = new DataSet();
        SqlDataAdapter adapter = new SqlDataAdapter(SqlCommand);
        adapter.Fill(DS, "Images");

        var imagesTable = DS.Tables["Images"];
        var imagesRows = imagesTable.Rows;
        var count = imagesRows.Count;

        if (count <= 0)
            return;
        var imageColumnValue =
            imagesRows[count - 1]["Image"];
        if (imageColumnValue == DBNull.Value)
            return;

        var data = (Byte[])imageColumnValue;
        using (var stream = new MemoryStream(data))
        {
            pictureBox1.Image = Image.FromStream(stream);
        }

    }
}

画像が大きすぎてpictureboxが収まらない場合。 pictureboxに画像を収めるコードは何ですか?私のpictureboxは正方形です。画像が長方形の場合、トリミングして this のように画像ボックスに表示する方法で、画像の下部が削除されます。

47
Karlx Swanovski

まず、画像をピクチャボックスに合わせて「サイズ変更」するために、PictureBox.SizeMode = PictureBoxSizeMode.StretchImageを設定できます

事前に画像のクリッピング(つまり、側面または上下を切り取る)を行う場合は、必要な動作を明確に定義する必要があります(上部から開始し、pcitureboxの高さを埋め、残りをトリミングするか、下部、ピクチャボックスの高さを上部に埋めるなど)、ピクチャボックスと画像の両方のHeight/Widthプロパティを使用して画像をクリップし、探している効果を得るのはかなり簡単です。

84
David C

次のコード行を使用すると、解決策が見つかります...

pictureBox1.ImageLocation = @"C:\Users\Desktop\mypicture.jpg";
pictureBox1.SizeMode =PictureBoxSizeMode.StretchImage;
19
Chandima

Pictureboxのsizemodeプロパティをご覧ください。

pictureBox1.SizeMode =PictureBoxSizeMode.StretchImage;
10
RBK

イマーム・マハディaj SizeMode Change in properties

プロパティセクションを使用できます

PictureboxのSizeModeプロパティをPictureSizeMode.Zoomに設定できます。これにより、小さい画像のサイズが大きくなるか、大きい画像のサイズが小さくなり、PictureBoxがいっぱいになります

6
Nicolas Gong

PictureBoxコントロールのSizeModeプロパティを使用して、Centerに設定できます。これにより、画像の中心が画像ボックスの中心に一致します。

pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;

それが役立つことを願っています。

VBにルーチンがあります。

しかし、あなたは2つのピクチャボックスを持っている必要があります..フレーム用に1つ..画像用に1つ..そしてそれは写真のサイズ比を維持する

想定されるpicFrameは画像フレームであり、picImgは画像です

Sub InsertPicture(ByVal oImg As Image)
    Dim oFoto As Image
    Dim x, y As Integer

    oFoto = oImg
    picImg.Visible = False
    picImg.Width = picFrame.Width - 2
    picImg.Height = picFrame.Height - 2
    picImg.Location = New Point(1, 1)
    SetPicture(picPreview, oFoto)
    x = (picImg.Width - picFrame.Width) / 2
    y = (picImg.Height - picFrame.Height) / 2
    picImg.Location = New Point(x, y)
    picImg.Visible = True

End Sub

私はあなたがC#としてそれを作ることができると確信しています....

0
matzone

PictureBox.SizeModeオプションには、「塗りつぶし」モードまたは「カバー」モードがありません。これは、画像ボックスを確実に塗りつぶすためのトリミングを除いて、ズームに似ています。 CSSでは、「カバー」オプションです。

このコードにより、次のことが可能になります。

static public void fillPictureBox(PictureBox pbox, Bitmap bmp)
{
    pbox.SizeMode = PictureBoxSizeMode.Normal;
    bool source_is_wider = (float)bmp.Width / bmp.Height > (float)pbox.Width / pbox.Height;

    Bitmap resized = new Bitmap(pbox.Width, pbox.Height);
    Graphics g = Graphics.FromImage(resized);        
    Rectangle dest_rect = new Rectangle(0, 0, pbox.Width, pbox.Height);
    Rectangle src_rect;

    if (source_is_wider)
    {
        float size_ratio = (float)pbox.Height / bmp.Height;
        int sample_width = (int)(pbox.Width / size_ratio);
        src_rect = new Rectangle((bmp.Width - sample_width) / 2, 0, sample_width, bmp.Height);
    }
    else
    {
        float size_ratio = (float)pbox.Width / bmp.Width;
        int sample_height = (int)(pbox.Height / size_ratio);
        src_rect = new Rectangle(0, (bmp.Height - sample_height) / 2, bmp.Width, sample_height);
    }

    g.DrawImage(bmp, dest_rect, src_rect, GraphicsUnit.Pixel);
    g.Dispose();

    pbox.Image = resized;
}
0
DAG

PictureBoxのSizeModeプロパティを変更してみてください。

画像をPictureBoxのBackGroundImageとして設定し、BackGroundImageLayoutを正しいモードに変更してみることもできます。

0
Max