نمایش نتایج 1 تا 4 از 4

نام تاپیک: تغيير سايز عكس و ذخيره در بانك اكسس چطوره ؟

  1. #1

    تغيير سايز عكس و ذخيره در بانك بدون تغيير در عكس اصلي ؟

    سلام دوستان

    زماني هست كه مي خواهيم در يك بانك عكس ذخيره كنم اما عكس هايي كه كاربر مي بيني از نظر حجم و اندازه بسيار بزرگ براي همين لازمه فقط يك نمونه كوچك شده عكس براي مراجعات بعدي تو بانك ذخيره بشه
    من مي خوام عكسي كه مسيرش به برنامه داده مي شه ابتدا Resize (كوچك) و بعد ذخيره بشه در عين حال به عكس اصلي كاري نداريم و تغييري نبايد ايجاد بشه و در اين مثال بانك Access هست و فرمت فيلد عكس داخل بانك هم از نوع OLE Object هست. براي SQL Server هم از نوع( VARBINERY(MAX مي شه استفاده كرد.

    من از كد زير استفاده كردم و اول عكس با سايز جديد بر روي مموري يا رَم ايجاد مي كنم


    StringBuilder path;
    private void selectButton_Click(object sender, EventArgs e)
    {
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
    path = new StringBuilder(openFileDialog1.FileName);
    Bitmap btm = new Bitmap(path.ToString());
    int x = btm.Width;
    int y = btm.Height;
    SetSize(ref x, ref y);
    btm = new Bitmap(btm, x, y);
    // btm.Save(openFileDialog1.FileName + ".gif");
    imageBox1.Image = btm;
    }
    }
    private void SetSize(ref int x, ref int y)
    {
    if (x > y)
    {
    y = (y * 200) / x;
    x = 200;
    }
    else if (x < y)
    {
    x = (x * 200) / y;
    y = 200;
    }
    else if (x == y)
    {
    x = 200;
    y = 200;
    }
    }


    من در اينجا خواستم با تابع SetSize به اندازه دلخواه خودم كه حداكثر عرض و طول 200px بوده در بيارم

    بعد اون تو بانك با كد زير ذخيره مي كنيم(در اينجا من از اكسس 2007 استفاده كردم واسه همين پس بانك accdb. هستش)

    private void addButton_Click(object sender, EventArgs e)
    {
    try
    {
    string strConnction="Provider=Microsoft.ACE.OLEDB.12.0;Da ta Source="+Application.StartupPath+"\\PicDB.accdb";
    OleDbConnection oleDbCommand1 = new OleDbConnection();
    OleDbCommand oleDbCommand1 = new OleDbCommand();
    oleDbCommand1.Connection = oleDbConnection1;
    MemoryStream ms = new MemoryStream();
    imageBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    byte[] bytes = ms.GetBuffer();
    oleDbCommand1.Parameters.Clear();
    oleDbCommand1.Parameters.Add("@Id",OleDbType.BSTR) .Value = textBox1.Text;
    oleDbCommand1.Parameters.Add("@Pic", OleDbType.Binary).Value = bytes;
    oleDbCommand1.CommandText = "insert into Pic (id, pic) values(@Id, @pic)";
    oleDbConnection1.Open();
    oleDbCommand1.ExecuteNonQuery();
    oleDbConnection1.Close();
    MessageBox.Show("Saved successful");
    }
    catch (Exception ex) { MessageBox.Show(ex.ToString()); }
    }


    مايکروسافت قويا هشدار داده است که ديگر از نوع داده IMAGE استفاده نکنيد و به جاي آن از نوع دادة (VARBINERY(MAX استفاده کنيد؛ بايد بدانيد که نوع دادة IMAGE فقط براي سازگاري با SQL Server 2000 هنوز در SQL Server 2005 وجود دارد و در نگارش بعدي SQL Server ، ديگر اين نوع داده پشتيباني نخواهد شد.


    اميدوارم بدرد ديگران هم بخوره...
    آخرین ویرایش به وسیله احمد سامعی : شنبه 17 اسفند 1387 در 16:53 عصر دلیل: اصلاح كد و وارد كردن كد كامل

  2. #2
    کاربر دائمی آواتار danial82
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    iran_tehran
    پست
    531

    نقل قول: تغيير سايز عكس و ذخيره در بانك اكسس چطوره ؟

    من چنین اروری میگیرم البته تو sql

    string or binary type would be truncate

  3. #3
    کاربر دائمی
    تاریخ عضویت
    آبان 1386
    محل زندگی
    قم
    پست
    657

    نقل قول: تغيير سايز عكس و ذخيره در بانك اكسس چطوره ؟

    اول از همه از زحمات اقای سامعی تشکر میکنم .

    کدی که برای ذخیره تصویر نوشته بودن را من به sql برگردوندم اما متاسفانه کار نکرد . به خاطر همین من کدشون را مقداری تغییر دادم .

    دوستان میتونند برای ذخیره عکس توی sql sarver از کد زیر استفاده کنند .

     private void btnAdd_Click(object sender, EventArgs e)
    {
    try
    {
    SqlConnection con = new SqlConnection("Data Source=MAHDI\\SQLEXPRESS;Initial Catalog=Picture;Integrated Security=True");
    string strSQL = "INSERT INTO TablePic(ID, Pic) VALUES(@ID ,@Pic)";
    con.Open();
    SqlCommand cmd = new SqlCommand(strSQL, con);
    MemoryStream ms = new MemoryStream();
    pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    byte[] bytes = ms.GetBuffer();
    cmd.Parameters.Add("@ID", SqlDbType.NVarChar, 50).Value = textBox1.Text;
    cmd.Parameters.Add("@Pic", SqlDbType.VarBinary).Value = bytes;
    cmd.ExecuteNonQuery();
    con.Close();
    MessageBox.Show("Saved successful");
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.ToString());
    }
    }


    موفق باشید .

  4. #4

    نقل قول: تغيير سايز عكس و ذخيره در بانك اكسس چطوره ؟

    با تشكر از جناب آقاي مهدي گل
    و با عرض پوزش از آقا دانيال عزيز
    شرمنده دوستان من كد و نمونه برنامه كار با SQL Server رو هم آماده كرده بودم اما اين روزها يكم درگير بنايي هستم واسه همين نتونستم بفرستم
    كد جناب مهدي خان كاملاً درست و بايد از همين كد واسه SQL Server استفاده بشه و فكر كنم احتياج به آپلود اون برنامه نباشه تا بار اضافي براي سرور سايت باشه(مي تونيد نمونه برنامه اين كار از لينك پست پايين بگيريد)

    اميدوارم بدرد همه بخوره

    ذخيره، بازيابي و به روزرساني عكس در پايگاه داده

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •