PDA

View Full Version : خطای درج عکس در بانک پس از تغییر سایز



md_davari
یک شنبه 08 خرداد 1390, 11:45 صبح
سلام بر اساتید
من یک عکس را با کد زیر تغییر سایز دادم
public Image Resize(Image img, int width, int height)
{
//create a new Bitmap the size of the new image
Bitmap bmp = new Bitmap(width, height);

//create a new graphic from the Bitmap
Graphics graphic = Graphics.FromImage((Image)bmp);
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;

//draw the newly resized image
graphic.DrawImage(img, 0, 0, width, height);

//dispose and free up the resources
graphic.Dispose();

//return the image
return (Image)bmp;
}


سپس در PictureBox قرار دادم و با کد زیر میخواهم اون را در MemoryStream بریزم تا بتونم تو دیتابیس درج کنم
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
ولی با خطای زیر مواجه شدم
Value cannot be null. Parameter name: encoder
http://up.vatandownload.com/images/qxnwf7b8phf4zx84ded.jpg
میتونید عیب کارم را بگید؟
در ضمن اگه با تابع Resize تغییر سایز ندم، این مشکل پیش نمیاد

smm2006sh
یک شنبه 08 خرداد 1390, 18:43 عصر
می تونی بیشتر توضیح بدی؟ یا کد بیشتری بگذاری

md_davari
دوشنبه 09 خرداد 1390, 13:43 عصر
می تونی بیشتر توضیح بدی؟ یا کد بیشتری بگذاری
دوست عزیز، من با تابع Resize که در بالا اومده، عکس موجود در pictureBox1 را تغییر سایز میدم که با موفقیت تغییر میکنه ولی به محض رسیدن به خط کد زیر خطا میده
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
کد کامل دکمه ای که زیرش کد نوشتم هم در زیر اومده
private void btn_Insert_Click(object sender, EventArgs e)
{
//resize picture
pictureBox1.Image = Resize(pictureBox1.Image, 200, 300)

SqlConnection conn = new SqlConnection(@"server=.\sqlexpress; integrated security=true; database=test");
SqlCommand comm = new SqlCommand("insert into picture (pic) values (@pic)", conn);

MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] arrby = ms.GetBuffer();
ms.Close();

comm.Parameters.AddWithValue("@pic", (object)pictureBox1.Image);
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
}
پیشاپیش از همه ی شما عزیزان که مرا را هنمایی خواهید کرد متشکرم!

arefba
دوشنبه 09 خرداد 1390, 16:00 عصر
الان بهت میگم بن مل ( یعنی ته گردن)
من این مشکل رو داشتم هیچ یک از برو بچ ایران نتونست درستش کنه تا به بیگانگان متوسل شدم
از این روش استفاده کن

byte[] imageData = (byte[])image1;

MemoryStream ms;


newImage = null;

using (ms = new MemoryStream(imageData, 0, imageData.Length))
{
ms.Write(imageData, 0, imageData.Length);

//Set image variable value using memory stream.
newImage = Image.FromStream(ms, true);

SaveFileDialog SaveFileDialog1 = new SaveFileDialog();


SaveFileDialog1.FileName = "";
if (SaveFileDialog1.ShowDialog() == DialogResult.OK)
{
Image img = Image.FromStream(ms, true);
img.Save(SaveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
}





}

md_davari
سه شنبه 10 خرداد 1390, 13:01 عصر
احسنت بر شما arefba که برای یافتن جواب خود حتی از بیگانگان هم کمک میگیرید (علم را بیاموزید، حتی از بیگانگان)
خیلی ممنون از جواب صحیح و کاملتون
مشکلم را حل کرد

hojati
یک شنبه 21 اسفند 1390, 19:52 عصر
منم همین مشکلو دارم ولی متوجه راهنمایی شما نشدم byte[] imageData = (byte[])image1; در این خط image1 دقیقا چه متغییری هست؟؟ میشه توضیح بدید

reza4359
یک شنبه 21 اسفند 1390, 21:57 عصر
دوست عزیز ممنون ولی این کد رو میشه توضیح بدید
byte[] imageData = (byte[])image1;
newImage = null;

cherchil_hra
دوشنبه 22 اسفند 1390, 08:22 صبح
شما می تونی از همون کدت استفاده کنی. قبل از Resize کردن System.Drawing.Imaging.ImageFormat f = pictureBox1.Image.RawFormat;
فرمت عکست رو نگه دار و بعد resize کن
System.Drawing.Imaging.ImageFormat f = pictureBox1.Image.RawFormat;
pictureBox1.Image = ResizePic(pictureBox1.Image, 80, 80);

MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms,f);

یا اینکه به جای f ، خودت مشخص کنی:System.Drawing.Imaging.ImageFormat.Gif;
System.Drawing.Imaging.ImageFormat.Jpeg;
System.Drawing.Imaging.ImageFormat.Png
...
ربطی هم با درج کردن در بانک اطلاعاتی نداره (قبل از درج این اتفاق می افته)
موفق باشید

hojati
دوشنبه 22 اسفند 1390, 09:42 صبح
من تونستم مشکلمو حل کنم اینم سایت مربوطه

http://forums.asp.net/t/1480079.aspx/1

این اون قسمتی که مشکل لوجود اومده بود و با این کد حل شد





Bitmap bitmap_file = new Bitmap(image_file, image_width, image_height);
System.IO.MemoryStream stream = new System.IO.MemoryStream();

bitmap_file.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
stream.Position = 0;

byte[] data = new byte[stream.Length + 1];
stream.Read(data, 0, data.Length);