web-dev-qa-db-fra.com

Ajuster l'image dans 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);
        }

    }
}

Si l'image est trop grande pour que le picturebox puisse s'y adapter. Quel est le code pour que l'image tienne dans le picturebox? Mon picturebox est carré, si l'image est rectangulaire, comment la rogner et l'afficher dans la boîte à images comme this , la partie inférieure de l'image sera supprimée.

47
Karlx Swanovski

Tout d’abord, pour que toute image soit "redimensionnée" par une image, vous pouvez définir le paramètre PictureBox.SizeMode = PictureBoxSizeMode.StretchImage

Si vous souhaitez découper l’image au préalable (c.-à-d. Couper les côtés ou le haut et le bas), vous devez définir clairement le comportement souhaité (commencer en haut, remplir la hauteur de la pciturebox et rogner le reste ou commencer à en bas, remplissez la hauteur de la zone d’image en haut, etc.) et il devrait être relativement simple d’utiliser les propriétés Hauteur/Largeur de la zone d’image et de l’image pour découper l’image et obtenir l’effet recherché.

84
David C

Utilisez les lignes de codes suivantes et vous trouverez la solution ...

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

Examinez la propriété sizemode de picturebox.

pictureBox1.SizeMode =PictureBoxSizeMode.StretchImage;
10
RBK

Imam Mahdi aj SizeMode Change in properties

Vous pouvez utiliser la section des propriétés

Vous pouvez définir la propriété SizeMode de picturebox sur PictureSizeMode.Zoom, cela augmentera la taille des images plus petites ou diminuera la taille des images plus grandes pour remplir le PictureBox

6
Nicolas Gong

Vous pouvez utiliser la propriété SizeMode du contrôle PictureBox et la définir sur Center. Cela fera correspondre le centre de votre image au centre de votre zone d'image.

pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;

J'espère que ça pourrait aider.

1

J'ai routine dans VB ..

mais vous devriez avoir 2 boites d'images .. 1 pour le cadre .. 1 pour l'image .. et faire garder le rapport de taille de l'image

PicFrame supposé est le cadre d'image et picImg est l'image

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

Je suis sûr que vous pouvez le faire en C # ....

0
matzone

Les options de PictureBox.SizeMode ne comportent pas de mode "Remplissage" ou "Couverture" qui serait comme un zoom sauf avec un recadrage pour vous assurer que vous remplissez la zone d'image. En CSS c'est l'option "couverture".

Ce code devrait permettre que:

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

Vous pouvez essayer de modifier la propriété: SizeMode de PictureBox.

Vous pouvez également définir votre image en tant qu'image BackGroundImage de PictureBox et essayer de modifier le mode BackGroundImageLayout.

0
Max