Здравствуйте, ребята. Я прочитал много статей о том, как изменить размер изображения и сохранить его в 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 оно фактически ИЗМЕНЯЕТСЯ, но как только пользователь нажимает кнопку добавления, где вызывается SaveAtLast()
, это фактически сохраняет изображение в таблицу с нормальным размером. а не измененный размер, который на самом деле находится в PictureBox.
Я действительно надеюсь, что это не имеет никакого отношения к типу изображения, потому что я читаю, как-то люди рекомендуют использовать VarBinary
вместо Image
.
Заранее спасибо, ребята.
РЕДАКТИРОВАТЬ: пожалуйста, парни, не знаю, помечено ли это как решенное или нет для всех, у кого такая же проблема с вставкой этих изображений в sql Пожалуйста, прочитайте комментарии ниже. Дай и Хабиб. Комментарий - это то, что помогло мне понять и что происходит с этими байтовыми изображениями и как осуществляется хранение, плюс эта статья, если вы также можете прочитать об этом https://www.codeproject.com/Articles/25956/Sending-Receiving-PictureBox-Image-in-C-To-From-Mi