【发布时间】:2020-01-12 02:08:43
【问题描述】:
大家好,我已经阅读了很多关于调整图像大小并将其存储到 SQL 中的文章。
在我发布我的问题之前,我将解释更多:我在 WinForms 中工作,使用 SQL 数据库。用户将图片上传到 SQL 中。
我想在存储之前调整图像大小。上传的图像将显示在 PictureBox 中。
SQL 数据类型是Image。
这是我上传图片的代码:
private void BUpload_Click(object sender, EventArgs e)
{
if (CmbImo.SelectedIndex != -1) {
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Image Files(*.jpeg;*.bmp;*.png;*.jpg)|*.jpeg;*.bmp;*.png;*.jpg";
if (open.ShowDialog() == DialogResult.OK)
{
pictureBox1.Text = open.FileName;
pictureBox1.Image = Image.FromFile(open.FileName);
pictureBox1.Image = resizeImage(pictureBox1.Image, new Size(430, 344));
}
else
{
label2.ForeColor = Color.Red;
label2.Text = "Are you sure you dont want to upload an image !!";
}
}
else
{
MessageBox.Show("Please Do Select an Imo !!");
}
pictureBox1.Visible = true;
}
这是我调整大小的过程:
public static Image resizeImage(Image imgToResize, Size size)
{
return (Image)(new Bitmap(imgToResize, size));
}
这是我插入表格的内容:
public void SaveATLast()
{
cnx.Close();
string image = pictureBox1.Text;
if (CmbImo.SelectedIndex != -1 && textBox1.Text!="" && textBox3.Text != "")
{
cnx.Open();
// string image = pictureBox1.Text;
Bitmap bmp = new Bitmap(image);
FileStream fs = new FileStream(image, FileMode.Open, FileAccess.Read);
byte[] bimage = new byte[fs.Length];
fs.Read(bimage, 0, Convert.ToInt32(fs.Length));
fs.Close();
SqlCommand cmd = new SqlCommand(" insert into Baa (Imo, Height, Name, ImageB, BPlug, APlug) values (@Imo, @Height, @Name, @imgdata, @BPlug, @APlug)", cnx);
cmd.Parameters.AddWithValue("@Imo", SqlDbType.Int).Value = CmbImo.SelectedItem.ToString();
cmd.Parameters.AddWithValue("@Height", SqlDbType.VarChar).Value = textBox3.Text;
cmd.Parameters.AddWithValue("@Name", SqlDbType.VarChar).Value = textBox1.Text;
cmd.Parameters.AddWithValue("@imgdata", SqlDbType.Image).Value = bimage;
cmd.Parameters.AddWithValue("@BPlug", SqlDbType.VarChar).Value = textBox4.Text;
cmd.Parameters.AddWithValue("@APlug", SqlDbType.Int).Value = textBox2.Text;
comboBox1.SelectedItem.ToString();
cmd.ExecuteNonQuery();
cnx.Close();
// this.Close();
textBox1.Clear();
textBox3.Clear();
textBox2.Clear();
textBox4.Clear();
pictureBox1.Image = null;
}
else
{
MessageBox.Show("Please do fill out all textboxes!");
}
}
为了更清楚一点,用户上传图片它进入 PictureBox,在 PictureBox 中它实际上是 RESIZED 但是一旦使用点击添加按钮,其中SaveAtLast() 被称为它实际上将图像保存到正常大小的表格中,而不是实际在 PictureBox 中的已调整大小的。
我真的希望它与图像类型无关,因为我读到有人建议使用VarBinary 而不是Image。
提前谢谢各位。
编辑: 请伙计们,我不知道这是否标记为已解决,对于将这些图像插入到 sql 时遇到相同问题的每个人,请阅读 Dai 和 Habib 下面的 cmets 评论是帮助我理解这个字节图像中发生了什么以及如何存储完成,如果您也可以阅读这篇文章,请加上这篇文章 https://www.codeproject.com/Articles/25956/Sending-Receiving-PictureBox-Image-in-C-To-From-Mi
【问题讨论】:
-
您需要使用
Graphics对象来调整图像大小。 -
T-SQL 中的
image数据类型已过时。它的替换是varbinary(max)。 -
请参阅Graphics.FromImage、Graphics.DrawImage、Graphics.InterpolationMode、(
InterpolationMode.HighQualityBicubic)、Graphics.PixelOffsetMode (PixelOffsetMode.Half)。如前所述,放弃Image数据类型。 -
也许第二次是魅力?不要使用addwithvalue
标签: c# sql-server winforms