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

نام تاپیک: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

  1. #1
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    Question مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    سلام
    من یه برنامه نوشیتم شبیه پینت و می خوام نقاشی که میکشن تو دیتا بیس ذخیره بشه ولی هر دفه فقط اگه عکس وارد پیچرباکس کنم فقط عکس ذخیره میشه تو دیتا بیس ولی نقاشیی که کشیده میشه اصلا تو دیتابیس ذخیره نمی شه راه حل شما چیه>؟؟؟

  2. #2
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    816

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    سلام

    فکر کنم باید یک شیء از نوع Image بسازید و در انتها شیء را ذخیره کنید. با این حال بخش هایی از کد را قرار بدید تا بشه کمی جزئیات کار را نگاه کرد.

  3. #3

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط HRC123 مشاهده تاپیک
    سلام
    من یه برنامه نوشیتم شبیه پینت و می خوام نقاشی که میکشن تو دیتا بیس ذخیره بشه ولی هر دفه فقط اگه عکس وارد پیچرباکس کنم فقط عکس ذخیره میشه تو دیتا بیس ولی نقاشیی که کشیده میشه اصلا تو دیتابیس ذخیره نمی شه راه حل شما چیه>؟؟؟
    رسم رو در کدوم Graphics انجام می دهید؟ رسم رو Graphics ای انجام بدهید که منبع اش دائمی باشه، پایدار باشه، قابل ذخیره کردن باشه.
    مثلا در Graphics ای رسم کنید که از طریق Graphics.FromImage یا از یک BufferedGraphics بدست اومده چون بعدا می توانید اون Image/Bitmap رو هر جایی که خواستید ذخیره کنید یا BufferedGraphics رو در Bitmap ای رسم کنید و ذخیره کنید.
    اما فرضا رسم در e.Graphics ئه pictureBox1_Paint منبعی نداره که دائمی و پایدار باشه.

    using System;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Drawing.Imaging;
    using System.Windows.Forms;

    public partial class Form1 : Form
    {
    private BufferedGraphics _buffer;
    private Point _p;
    private Size _size;

    public Form1( )
    {
    InitializeComponent( );
    }

    private void Form1_Load( object sender, EventArgs e)
    {
    using ( var g = pictureBox1. CreateGraphics( ))
    {
    _buffer = BufferedGraphicsManager. Current.Allocate( g, pictureBox1. ClientRectangle);
    _size = pictureBox1. ClientSize;
    _buffer.Graphics. Clear( pictureBox1.BackColor);
    _buffer.Graphics. SmoothingMode = SmoothingMode. HighQuality;
    }
    }

    private void pictureBox1_MouseMove( object sender, MouseEventArgs e)
    {
    if (( e.Button != MouseButtons.Left) || ( Math. Pow( e. X - _p. X, 2) + Math. Pow( e. Y - _p. Y, 2) < 100))
    {
    return;
    }
    using ( var pen = new Pen( Color. Blue, 8f))
    {
    _buffer.Graphics. DrawLine( pen, _p, e. Location);
    }
    _buffer.Graphics. FillEllipse( Brushes. Blue, e. X - 4, e. Y - 4, 8, 8);
    _p = e.Location;
    pictureBox1.Invalidate();
    }

    private void pictureBox1_MouseDown( object sender, MouseEventArgs e)
    {
    if ( e. Button != MouseButtons. Left)
    {
    return;
    }
    _p = e.Location;
    _buffer.Graphics.FillEllipse( Brushes. Blue, _p. X - 4, _p. Y - 4, 8, 8);
    pictureBox1.Invalidate( );
    }

    private void pictureBox1_Paint( object sender, PaintEventArgs e)
    {
    if ( _buffer != null)
    {
    _buffer.Render( e.Graphics);
    }
    }

    private void button1_Click( object sender, EventArgs e)
    {
    using ( var bitmap = new Bitmap( _size.Width, _size.Height))
    {
    using ( var g = Graphics.FromImage( bitmap))
    {
    _buffer.Render( g);
    }
    bitmap.Save( "test.jpg", ImageFormat.Jpeg);
    }
    }
    }

  4. #4
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    [

    Bitmap bmp_image;
    LinearGradientBrush linearBr;
    Pen p;
    bool click = false;
    Point p1, p2;
    int x1, x2, y1, y2;
    float z;
    Graphics g;
    string myString;


    ////

    p2 = e.Location;
    g.DrawLine(new Pen(colorDialog1.Color, z), p1, p2);
    p1 = p2;



    سلام دوباره من برا کشیدن خط از کد بالا استفاده کردم یعنی میفرمایین اینا قابل ثبت نیست و کل کدهام رو باید عوض کنم؟؟؟
    برا کشیدن دایره،مربع و...؟؟؟

  5. #5

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط HRC123 مشاهده تاپیک
    [

    Bitmap bmp_image;
    LinearGradientBrush linearBr;
    Pen p;
    bool click = false;
    Point p1, p2;
    int x1, x2, y1, y2;
    float z;
    Graphics g;
    string myString;


    ////

    p2 = e.Location;
    g.DrawLine(new Pen(colorDialog1.Color, z), p1, p2);
    p1 = p2;



    سلام دوباره من برا کشیدن خط از کد بالا استفاده کردم یعنی میفرمایین اینا قابل ثبت نیست و کل کدهام رو باید عوض کنم؟؟؟
    برا کشیدن دایره،مربع و...؟؟؟
    در این کد مشخص نیست، یعنی اون بخشی که g رو مقدار دهی می کنید نمی بینم.
    ببینید شما الان یک g دارید که Graphics شما است و باهاش رسم انجام می دهید، تا اینجای کار مشکلی نداره، اما اون g از کجا میاد؟ چه مقداری رو داخل g قرار می دهید؟ اون مهمه.
    شما یکجای کد چیزی شبیه به ... = g دارید که اون ... منبع Graphics شما است، فرضا اگر با ()CreateGraphics اون g رو ساخته اید اصولا منبع پایداری نمیشه.
    ببینید من در این کد دارم g رو از چی دریافت می کنم؟ از ()Graphics.FromImage
    چی رو ذخیره می کنم؟ bmp_image رو.

    using System;
    using System. Drawing;
    using System. Drawing.Imaging;
    using System. Windows.Forms;

    public partial class Form1 : Form
    {
    private Bitmap bmp_image;
    private Point _p;
    private Size _size;

    public Form1( )
    {
    InitializeComponent( );
    }

    private void Form1_Load( object sender, EventArgs e)
    {
    bmp_image = new Bitmap( pictureBox1. ClientSize.Width, pictureBox1. ClientSize.Height);
    using ( var g = Graphics. FromImage( bmp_image))
    {
    g.Clear( pictureBox1. BackColor);
    }
    }

    private void pictureBox1_MouseMove( object sender, MouseEventArgs e)
    {
    if ( ( e.Button != MouseButtons. Left) || ( Math.Pow( e.X - _p.X, 2) + Math.Pow( e.Y - _p.Y, 2) < 100))
    {
    return;
    }
    using ( var g = Graphics. FromImage( bmp_image))
    {
    using ( var pen = new Pen( Color.Blue, 8f))
    {
    g.DrawLine( pen, _p, e.Location);
    }
    g.FillEllipse( Brushes. Blue, e.X - 4, e.Y - 4, 8, 8);
    }
    _p = e.Location;
    pictureBox1. Invalidate( );
    }

    private void pictureBox1_MouseDown( object sender, MouseEventArgs e)
    {
    if ( e.Button != MouseButtons. Left)
    {
    return;
    }
    _p = e.Location;
    using ( var g = Graphics. FromImage( bmp_image))
    {
    g.FillEllipse( Brushes.Blue, _p.X - 4, _p.Y - 4, 8, 8);
    }
    pictureBox1. Invalidate( );
    }

    private void pictureBox1_Paint( object sender, PaintEventArgs e)
    {
    if ( bmp_image != null)
    {
    var rect = new Rectangle( Point. Empty, bmp_image.Size);
    e.Graphics. DrawImage( bmp_image, rect, rect, GraphicsUnit. Pixel);
    }
    }

    private void button1_Click( object sender, EventArgs e)
    {
    bmp_image.Save( "test.jpg", ImageFormat. Jpeg);
    }
    }

  6. #6
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ



    g = pic1.CreateGraphics();

    منظروتون اینه که پیچرباکس رو واسه کارای گرایکی تعریف کردم؟؟؟

  7. #7
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    ببخشید من کد رو نخوندم فقط فکر کردم کارم رو اشتباه انجام دادم الان کد رو کامل می خونم
    آخه قبلش فکر کردم فقط روش ذخیره سازی باید فرق داشته بشا واسه اس کیو ال سرور الان کدتون رو می خونم ببینم چی میشه تشکر

  8. #8
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    با سلام آقا با این روش هم پیاده سازی کردم ولی باز هم نقاشی تو دیتا بیس ذخیره نشد که نشد

  9. #9

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط HRC123 مشاهده تاپیک
    با سلام آقا با این روش هم پیاده سازی کردم ولی باز هم نقاشی تو دیتا بیس ذخیره نشد که نشد
    با چه کد و روالی ذخیره سازی رو انجام می دهید؟

  10. #10
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    با چه کد و روالی ذخیره سازی رو انجام می دهید؟

    public static byte[] ImageToByte(Image photo)
    {
    ImageConverter conimg = new ImageConverter();
    return (byte[])conimg.ConvertTo(photo, typeof(byte[]));
    }




    command.Parameters.Clear();
    command.Connection = connect;
    command.CommandText = "insert into naghashi(user_id,save_id,user_img)" +
    "values(@user_id,@save_id,@user_img)";
    command.Parameters.AddWithValue("@user_id", lblucu.Text);
    command.Parameters.AddWithValue("@save_id", lblscode.Text);

    Image newImage = picedite.Image;
    command.Parameters.AddWithValue("@user_img", ImageToByte(newImage));
    connect.Open();
    command.ExecuteNonQuery();
    connect.Close();
    آخرین ویرایش به وسیله HRC123 : دوشنبه 09 فروردین 1400 در 21:39 عصر دلیل: چند خط اضافیی

  11. #11

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط HRC123 مشاهده تاپیک

    public static byte[] ImageToByte(Image photo)
    {
    ImageConverter conimg = new ImageConverter();
    return (byte[])conimg.ConvertTo(photo, typeof(byte[]));
    }




    command.Parameters.Clear();
    command.Connection = connect;
    command.CommandText = "insert into naghashi(user_id,save_id,user_img)" +
    "values(@user_id,@save_id,@user_img)";
    command.Parameters.AddWithValue("@user_id", lblucu.Text);
    command.Parameters.AddWithValue("@save_id", lblscode.Text);

    Image newImage = picedite.Image;
    command.Parameters.AddWithValue("@user_img", ImageToByte(newImage));
    connect.Open();
    command.ExecuteNonQuery();
    connect.Close();
    متد ImageToByte تون که داده تصویر رو با فرمت png به آرایه ای از بایت ها تبدیل می کنه ایرادی نداره.
    کد insert into naghashi تون هم خودش ایرادی نداره، اما اشکال کار اینجا است که اون newImage شما میخواد picedite.Image رو ذخیره کنه، در حالی که نقاشی شما در picedite.Image نیست، در مثال آخری که کدش رو نوشتم تصویر شما در فیلد bmp_image قرار داره، اون رو باید ذخیره می کردید.
    ایراد کار کدتون اینه که بجای ذخیره کردن اون Bitmap ای که نقاشی رو داخلش می کشید picedite.Image رو ذخیره می کنید که قاعدتا یک تصویر آماده است که موقع نقاشی تغییری نمی کنه و ثابته.

  12. #12
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    متد ImageToByte تون که داده تصویر رو با فرمت png به آرایه ای از بایت ها تبدیل می کنه ایرادی نداره.
    کد insert into naghashi تون هم خودش ایرادی نداره، اما اشکال کار اینجا است که اون newImage شما میخواد picedite.Image رو ذخیره کنه، در حالی که نقاشی شما در picedite.Image نیست، در مثال آخری که کدش رو نوشتم تصویر شما در فیلد bmp_image قرار داره، اون رو باید ذخیره می کردید.
    ایراد کار کدتون اینه که بجای ذخیره کردن اون Bitmap ای که نقاشی رو داخلش می کشید picedite.Image رو ذخیره می کنید که قاعدتا یک تصویر آماده است که موقع نقاشی تغییری نمی کنه و ثابته.
    تشکر فراوان

  13. #13
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    متد ImageToByte تون که داده تصویر رو با فرمت png به آرایه ای از بایت ها تبدیل می کنه ایرادی نداره.
    کد insert into naghashi تون هم خودش ایرادی نداره، اما اشکال کار اینجا است که اون newImage شما میخواد picedite.Image رو ذخیره کنه، در حالی که نقاشی شما در picedite.Image نیست، در مثال آخری که کدش رو نوشتم تصویر شما در فیلد bmp_image قرار داره، اون رو باید ذخیره می کردید.
    ایراد کار کدتون اینه که بجای ذخیره کردن اون Bitmap ای که نقاشی رو داخلش می کشید picedite.Image رو ذخیره می کنید که قاعدتا یک تصویر آماده است که موقع نقاشی تغییری نمی کنه و ثابته.
    حالا این که نقاشی ذخیره میشه درست ولی اگه تصویر بیاره ئ روی تصویر نقاشی کنه نقاشی ذخیره میشه ولی تصویر ذخیره نمیشه چجوری ترکیب هردو رو ذخیره کنم؟؟؟
    تشکر

  14. #14

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط HRC123 مشاهده تاپیک
    حالا این که نقاشی ذخیره میشه درست ولی اگه تصویر بیاره ئ روی تصویر نقاشی کنه نقاشی ذخیره میشه ولی تصویر ذخیره نمیشه چجوری ترکیب هردو رو ذخیره کنم؟؟؟
    تشکر
    بذارید picedite فاقد تصویر باشه، مقدار picedite.Image ئه null باشه.
    ولی اون تصویری که میخواستید در picedite.Image قرار بگیره رو در bmp_image قرار بدهید تا پیش از اینکه نقاشی شروع بشه اون تصویر داخلش باشه :

    private void Form1_Load(object sender, EventArgs e)
    {
    var image = picedite.Image;
    picedite.Image = null;
    bmp_image = new Bitmap(picedite.ClientSize.Width, picedite.ClientSize.Height);
    using (var g = Graphics.FromImage(bmp_image))
    {
    g.Clear(picedite.BackColor);
    g.DrawImage(image, (bmp_image.Width - image.Width) / 2, (bmp_image.Height - image.Height) / 2);
    }
    }

    این کد بالا تصویر رو از picedite.Image به داخل bmp_image منتقل می کنه و البته در وسط picedite رسم می کنه.
    اما این کد پایین تصویر رو در ابعاد picedite بزرگ یا کوچیک می کنه :

    private void Form1_Load(object sender, EventArgs e)
    {
    var image = picedite.Image;
    picedite.Image = null;
    bmp_image = new Bitmap(picedite.ClientSize.Width, picedite.ClientSize.Height);
    using (var g = Graphics.FromImage(bmp_image))
    {
    g.Clear(picedite.BackColor);
    var dst = new Rectangle(Point.Empty, bmp_image.Size);
    var src = new Rectangle(Point.Empty, image.Size);
    g.DrawImage(image, dst, src, GraphicsUnit.Pixel);
    }
    }

  15. #15
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    بذارید picedite فاقد تصویر باشه، مقدار picedite.Image ئه null باشه.
    ولی اون تصویری که میخواستید در picedite.Image قرار بگیره رو در bmp_image قرار بدهید تا پیش از اینکه نقاشی شروع بشه اون تصویر داخلش باشه :

    private void Form1_Load(object sender, EventArgs e)
    {
    var image = picedite.Image;
    picedite.Image = null;
    bmp_image = new Bitmap(picedite.ClientSize.Width, picedite.ClientSize.Height);
    using (var g = Graphics.FromImage(bmp_image))
    {
    g.Clear(picedite.BackColor);
    g.DrawImage(image, (bmp_image.Width - image.Width) / 2, (bmp_image.Height - image.Height) / 2);
    }
    }

    این کد بالا تصویر رو از picedite.Image به داخل bmp_image منتقل می کنه و البته در وسط picedite رسم می کنه.
    اما این کد پایین تصویر رو در ابعاد picedite بزرگ یا کوچیک می کنه :

    private void Form1_Load(object sender, EventArgs e)
    {
    var image = picedite.Image;
    picedite.Image = null;
    bmp_image = new Bitmap(picedite.ClientSize.Width, picedite.ClientSize.Height);
    using (var g = Graphics.FromImage(bmp_image))
    {
    g.Clear(picedite.BackColor);
    var dst = new Rectangle(Point.Empty, bmp_image.Size);
    var src = new Rectangle(Point.Empty, image.Size);
    g.DrawImage(image, dst, src, GraphicsUnit.Pixel);
    }
    }
    ببخشید کاربر عکس رو انتخاب می کنه یعنی با open file dialog میاره با این روش میشه؟؟؟
    یعنی وقتی ایمیج خالی میشه دوباره توش تصویر قرار میگیره؟؟؟

  16. #16
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    جواب داد تشکر فراوان خیلی ممنون

  17. #17
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    بذارید picedite فاقد تصویر باشه، مقدار picedite.Image ئه null باشه.
    ولی اون تصویری که میخواستید در picedite.Image قرار بگیره رو در bmp_image قرار بدهید تا پیش از اینکه نقاشی شروع بشه اون تصویر داخلش باشه :

    private void Form1_Load(object sender, EventArgs e)
    {
    var image = picedite.Image;
    picedite.Image = null;
    bmp_image = new Bitmap(picedite.ClientSize.Width, picedite.ClientSize.Height);
    using (var g = Graphics.FromImage(bmp_image))
    {
    g.Clear(picedite.BackColor);
    g.DrawImage(image, (bmp_image.Width - image.Width) / 2, (bmp_image.Height - image.Height) / 2);
    }
    }

    این کد بالا تصویر رو از picedite.Image به داخل bmp_image منتقل می کنه و البته در وسط picedite رسم می کنه.
    اما این کد پایین تصویر رو در ابعاد picedite بزرگ یا کوچیک می کنه :

    private void Form1_Load(object sender, EventArgs e)
    {
    var image = picedite.Image;
    picedite.Image = null;
    bmp_image = new Bitmap(picedite.ClientSize.Width, picedite.ClientSize.Height);
    using (var g = Graphics.FromImage(bmp_image))
    {
    g.Clear(picedite.BackColor);
    var dst = new Rectangle(Point.Empty, bmp_image.Size);
    var src = new Rectangle(Point.Empty, image.Size);
    g.DrawImage(image, dst, src, GraphicsUnit.Pixel);
    }
    }
    سلام آقا شرمنده الان کل مشکل ذخیره سازی حل شد ولی هر کاری می کنم کانورت Imgetobyte نرو نمی تونم واسه ویرایش استفاده کنم همه جورشو امتحان کردم اصلا جواب نداد حالا اگه ممکنه واسه ویراشم کمک کنید بایتش می کنم یا هر جور دیگه اصلا جواب نمی ده
    تشکر

  18. #18

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط HRC123 مشاهده تاپیک
    سلام آقا شرمنده الان کل مشکل ذخیره سازی حل شد ولی هر کاری می کنم کانورت Imgetobyte نرو نمی تونم واسه ویرایش استفاده کنم همه جورشو امتحان کردم اصلا جواب نداد حالا اگه ممکنه واسه ویراشم کمک کنید بایتش می کنم یا هر جور دیگه اصلا جواب نمی ده
    تشکر
    منظورتون اینه که اون تصویر ذخیره شده در پایگاه داده رو مجددا باز کنید و ویرایش کنید؟

    command.Parameters.Clear();
    command.Connection = connect;
    command.CommandText = "select save_id,user_img from naghashi where " +
    "user_id=@user_id";
    command.Parameters.AddWithValue("@user_id", lblucu.Text);
    connect.Open();
    using (var reader = command.ExecuteReader())
    {
    if (reader.Read())
    {
    bmp_image = (Bitmap)ByteToImage(reader["user_img"]);
    lblscode.Text = reader["save_id"].ToString();
    picedite.Invalidate();
    }
    }
    connect.Close();



    public static Image ByteToImage(object bytes)
    {
    ImageConverter conimg = new ImageConverter();
    return (Image)conimg.ConvertFrom(bytes);
    }



    command.Parameters.Clear();
    command.Connection = connect;
    command.CommandText = "update naghashi set user_img=@user_img where " +
    "user_id=@user_id AND save_id=@save_id";
    command.Parameters.AddWithValue("@user_id", lblucu.Text);
    command.Parameters.AddWithValue("@save_id", lblscode.Text);
    command.Parameters.AddWithValue("@user_img", ImageToByte(bmp_image));
    connect.Open();
    command.ExecuteNonQuery();
    connect.Close();

  19. #19
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    منظورتون اینه که اون تصویر ذخیره شده در پایگاه داده رو مجددا باز کنید و ویرایش کنید؟

    command.Parameters.Clear();
    command.Connection = connect;
    command.CommandText = "select save_id,user_img from naghashi where " +
    "user_id=@user_id";
    command.Parameters.AddWithValue("@user_id", lblucu.Text);
    connect.Open();
    using (var reader = command.ExecuteReader())
    {
    if (reader.Read())
    {
    bmp_image = (Bitmap)ByteToImage(reader["user_img"]);
    lblscode.Text = reader["save_id"].ToString();
    picedite.Invalidate();
    }
    }
    connect.Close();



    public static Image ByteToImage(object bytes)
    {
    ImageConverter conimg = new ImageConverter();
    return (Image)conimg.ConvertFrom(bytes);
    }



    command.Parameters.Clear();
    command.Connection = connect;
    command.CommandText = "update naghashi set user_img=@user_img where " +
    "user_id=@user_id AND save_id=@save_id";
    command.Parameters.AddWithValue("@user_id", lblucu.Text);
    command.Parameters.AddWithValue("@save_id", lblscode.Text);
    command.Parameters.AddWithValue("@user_img", ImageToByte(bmp_image));
    connect.Open();
    command.ExecuteNonQuery();
    connect.Close();
    تشکر اون بالایی ها رو داشتم فقط کد ویرایشم یه شکل دیگه بود الان به این سبک مینویسم بازم تشکر

  20. #20
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    باسلام و عرض شرمندگی
    الان باید چه کار کنم که حجم عکسا بیاد پایین که حجم دیتابیس نره خیلی بالا؟

  21. #21

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط HRC123 مشاهده تاپیک
    باسلام و عرض شرمندگی
    الان باید چه کار کنم که حجم عکسا بیاد پایین که حجم دیتابیس نره خیلی بالا؟
    اگه تنوع رنگی و جزئیات کم باشه PNG خوب جواب میده وگرنه فشرده سازی درصدی JPEG رو امتحان کنید، 100 درصد بهترین کیفیت با کمترین فشرده سازی و بیشترین حجم داده رو داره.
    هر چقدر درصد پایینتر باشه فشرده سازی افزایش پیدا می کنه اما در عوض کیفیت تصویر هم پایین میاد.
    البته JPEG دیگه زمینه شفاف رو مثل PNG پشتیبانی نمی کنه و اگر زمینه تصویر شفاف بود در خروجی مشکی میشه.

    using System.Drawing.Imaging;


    public static byte[] ImageToByte(Image photo, int qualityPercent)
    {
    ImageCodecInfo jpgEncoder = null;
    foreach (var codec in ImageCodecInfo. GetImageEncoders())
    {
    if (codec.FormatID == ImageFormat.Jpeg. Guid)
    {
    jpgEncoder = codec;
    break;
    }
    }
    if (jpgEncoder == null)
    {
    throw new InvalidOperationException();
    }
    var parameters = new EncoderParameters(1);
    parameters.Param [0] = new EncoderParameter( Encoder.Quality, qualityPercent);
    using (var stream = new System.IO. MemoryStream())
    {
    photo.Save(stream, jpgEncoder, parameters);
    return stream.ToArray();
    }
    }


    مثلا با کیفیت 50 درصد :

    command.Parameters. AddWithValue ("@user_img", ImageToByte (bmp_image, 50));


    با کیفیت 85 درصد :

    command.Parameters. AddWithValue ("@user_img", ImageToByte (bmp_image, 85));

  22. #22
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    اگه تنوع رنگی و جزئیات کم باشه PNG خوب جواب میده وگرنه فشرده سازی درصدی JPEG رو امتحان کنید، 100 درصد بهترین کیفیت با کمترین فشرده سازی و بیشترین حجم داده رو داره.
    هر چقدر درصد پایینتر باشه فشرده سازی افزایش پیدا می کنه اما در عوض کیفیت تصویر هم پایین میاد.
    البته JPEG دیگه زمینه شفاف رو مثل PNG پشتیبانی نمی کنه و اگر زمینه تصویر شفاف بود در خروجی مشکی میشه.

    using System.Drawing.Imaging;


    public static byte[] ImageToByte(Image photo, int qualityPercent)
    {
    ImageCodecInfo jpgEncoder = null;
    foreach (var codec in ImageCodecInfo. GetImageEncoders())
    {
    if (codec.FormatID == ImageFormat.Jpeg. Guid)
    {
    jpgEncoder = codec;
    break;
    }
    }
    if (jpgEncoder == null)
    {
    throw new InvalidOperationException();
    }
    var parameters = new EncoderParameters(1);
    parameters.Param [0] = new EncoderParameter( Encoder.Quality, qualityPercent);
    using (var stream = new System.IO. MemoryStream())
    {
    photo.Save(stream, jpgEncoder, parameters);
    return stream.ToArray();
    }
    }


    مثلا با کیفیت 50 درصد :

    command.Parameters. AddWithValue ("@user_img", ImageToByte (bmp_image, 50));


    با کیفیت 85 درصد :

    command.Parameters. AddWithValue ("@user_img", ImageToByte (bmp_image, 85));
    میشه لطفا این ک رو برام توضیح بدید ؟؟؟برام گنگه شرمنده

  23. #23

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط HRC123 مشاهده تاپیک
    میشه لطفا این ک رو برام توضیح بدید ؟؟؟برام گنگه شرمنده
    شما در کدتون دو فرمان SQL داشتید که با update naghashi و insert into naghashi بایت های تصویر رو در پایگاه داده ذخیره میکرد.
    بایت های تصویر رو با ImageToByte بدست میاوردید که با ImageConverter.ConvertFrom کار میکرد و خروجی اش بایت های فرمت PNG بود و تنظیم فشرده سازی نداشت.
    برای همین یک ImageToByte جدید نوشتم که از فرمت JPEG استفاده کنه و از فشرده سازی JPEG برای کاهش قابل تنظیم حجم داده استفاده کنه.
    که بجای اون ImageToByte قبلی از ImageToByte جدید که بجای یک پارامتر ورودی دو پارامتر داره (پارامتر دوم کیفیت تصویر برحسب درصد) استفاده کنید.

    در کد ImageToByte جدید ابتدا بین Encoder های موجود که تصویر رو با فرمت های مختلف فشرده می کنند، Encoder مربوط به JPEG رو پیدا می کنیم و در jpgEncoder قرار می دهیم.
    سپس یک پارامتر برای تنظیم کیفیت در Encoder ایجاد می کنیم (Encoder.Quality) و تصویر رو با اون Encoder و اون پارامتر کیفیت فشرده و ذخیره می کنیم.
    اما ذخیره سازی رو در فایل انجام نمی دهیم، موقتا در حافظه RAM و داخل یک MemoryStream ذخیره اش می کنیم چون قراره دور ریخته بشه.
    صرفا پیش از دور ریختنش بایت های ذخیره شده در اون MemoryStream رو بصورت آرایه بایتی از ImageToByte بر میگردونیم.

  24. #24
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    شما در کدتون دو فرمان SQL داشتید که با update naghashi و insert into naghashi بایت های تصویر رو در پایگاه داده ذخیره میکرد.
    بایت های تصویر رو با ImageToByte بدست میاوردید که با ImageConverter.ConvertFrom کار میکرد و خروجی اش بایت های فرمت PNG بود و تنظیم فشرده سازی نداشت.
    برای همین یک ImageToByte جدید نوشتم که از فرمت JPEG استفاده کنه و از فشرده سازی JPEG برای کاهش قابل تنظیم حجم داده استفاده کنه.
    که بجای اون ImageToByte قبلی از ImageToByte جدید که بجای یک پارامتر ورودی دو پارامتر داره (پارامتر دوم کیفیت تصویر برحسب درصد) استفاده کنید.

    در کد ImageToByte جدید ابتدا بین Encoder های موجود که تصویر رو با فرمت های مختلف فشرده می کنند، Encoder مربوط به JPEG رو پیدا می کنیم و در jpgEncoder قرار می دهیم.
    سپس یک پارامتر برای تنظیم کیفیت در Encoder ایجاد می کنیم (Encoder.Quality) و تصویر رو با اون Encoder و اون پارامتر کیفیت فشرده و ذخیره می کنیم.
    اما ذخیره سازی رو در فایل انجام نمی دهیم، موقتا در حافظه RAM و داخل یک MemoryStream ذخیره اش می کنیم چون قراره دور ریخته بشه.
    صرفا پیش از دور ریختنش بایت های ذخیره شده در اون MemoryStream رو بصورت آرایه بایتی از ImageToByte بر میگردونیم.
    از په کتاب خونه ای باید استفاده کنم براش؟؟؟




  25. #25

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط HRC123 مشاهده تاپیک
    از په کتاب خونه ای باید استفاده کنم براش؟؟؟



    کتابخانه خاصی نمیخواد، فقط کامپایلر دچار ابهام شده.
    چون در کدتون هم using System.Drawing.Imaging و هم using System.Text هست، سر دو راهی مونده که اون Encoder داخل کد باید System.Drawing.Imaging.Encoder باشه یا System.Text.Encoder
    می توانید اون سطر رو تغییر بدهید :

    parameters.Param[0] = new EncoderParameter ( System.Drawing. Imaging.Encoder. Quality, (long) qualityPercent);

  26. #26
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    کتابخانه خاصی نمیخواد، فقط کامپایلر دچار ابهام شده.
    چون در کدتون هم using System.Drawing.Imaging و هم using System.Text هست، سر دو راهی مونده که اون Encoder داخل کد باید System.Drawing.Imaging.Encoder باشه یا System.Text.Encoder
    می توانید اون سطر رو تغییر بدهید :

    parameters.Param[0] = new EncoderParameter ( System.Drawing. Imaging.Encoder. Quality, (long) qualityPercent);
    با عرض سلام مزاحم همیشه گی برگشت
    آقا از وقتی که کد ها رو به سبک بالا در آوردم اگه بدون عکس بخوام رو نقاشی بکشم میگه مقدار نمی تونه خالی باشه و تصویر دیفالتم که میزارم نمیارتش بالا .
    حالا یه کامبو باکس گذاشتم که وصله به یه جدول دیگه که عکسای بچه گونه داخلشه و یه فیلد نام داره مثلا بادبادک ، عروسک و... می خوام اینو که از کامبو باکس انتخاب کرد عکسش که تو دیتا بیسه بیاره تو پیچر باکسم با هر کوئری و روشی که امتحان کردم جواب نگرفتم میشه راهنماییم کنید؟؟؟
    تشکر

  27. #27

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط HRC123 مشاهده تاپیک
    با عرض سلام مزاحم همیشه گی برگشت
    آقا از وقتی که کد ها رو به سبک بالا در آوردم اگه بدون عکس بخوام رو نقاشی بکشم میگه مقدار نمی تونه خالی باشه و تصویر دیفالتم که میزارم نمیارتش بالا .
    حالا یه کامبو باکس گذاشتم که وصله به یه جدول دیگه که عکسای بچه گونه داخلشه و یه فیلد نام داره مثلا بادبادک ، عروسک و... می خوام اینو که از کامبو باکس انتخاب کرد عکسش که تو دیتا بیسه بیاره تو پیچر باکسم با هر کوئری و روشی که امتحان کردم جواب نگرفتم میشه راهنماییم کنید؟؟؟
    تشکر
    نمیدونم الان کدتون چه شکلی پیدا کرده ولی احتمالا سر کد g.DrawImage(image خطا میده که image ئه null ئه.
    برای اون سطر یا هر سطری که مشابه اون خطا میده یک شرط if (image != null) قبلش اضافه کنید تا فقط در صورتی اجرا بشه که image ئه null نباشه.

  28. #28
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    واسه واکشی تصویر از کامبو باکس هم نظری یا کدی میدید شاید کد های من مشکل داشته باشه

  29. #29

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    نقل قول نوشته شده توسط HRC123 مشاهده تاپیک
    واسه واکشی تصویر از کامبو باکس هم نظری یا کدی میدید شاید کد های من مشکل داشته باشه
    بستگی داره در پایگاه داده و ComboBox چی قرار داده باشید.
    یک حالت ساده ای هست که شما میایید برای هر تصویر یک فیلد اسم در نظر می گیرید، مثلا pic_name و در ComboBox فقط اسم اون تصاویر (pic_name ها) رو لیست می کنید.
    یعنی ابتدای کار برنامه اسامی تمامی تصاویر موجود در پایگاه داده رو میخونید و در ComboBox لیست می کنید.
    و موقعی که یکی شون انتخاب شد بر اساس اون نام کوئری SELECT در پایگاه داده رو اجرا می کنید تا تصویر متناظر اون ComboBox.Text رو در پایگاه داده بخونه و برگردونه و بعد تصویر رو که با SELECT خوندید در bmp_image قرار می دهید و ()picedite.Invalidate رو اجرا می کنید تا تصویر جدید دیده بشه.

    یک حالت پیشرفته تری هست که شما فقط اسامی رو ثبت و لیست نمی کنید، یک نمونه کوچک از تصویر شون رو هم ثبت و لیست می کنید (مثلا با نام thumbnail) تا کاربر ببینه عکس اون آیتم ها چه شکلی ئه، شبیه نمایش لایه ها در فتوشاپ یا نمایش آیکون فایل ها در Explorer ویندوز.
    پس ابتدای کار برنامه اسم و تصویر بندانگشتی (thumbnail) تمامی رکورد های موجود در پایگاه داده رو میخونید و در ComboBox اسم و یک نمونه تصویر کوچک (نه خود تصویر اصلی چون اون همه تصویر بزرگ حافظه زیادی میخواد) رو نمایش می دهید.
    و موقعی که یکی شون انتخاب شد بر اساس اون نام کوئری SELECT در پایگاه داده رو اجرا می کنید تا تصویر متناظر اون ComboBox.Text رو در پایگاه داده بخونه و برگردونه و بعد تصویر اصلی رو که با SELECT خوندید در bmp_image قرار می دهید و ()picedite.Invalidate رو اجرا می کنید تا تصویر جدید دیده بشه.
    Image خودش یک متد Image.GetThumbnailImage داره که بتونه از روی تصویر بزرگ نمونه کوچک اش رو در ابعاد فلان بسازه تا موقع ساختن یا ویرایش تصویر اون thumbnail رو هم در پایگاه داده ذخیره کنید.

    command.Parameters.Clear();
    command.Connection = connect;
    command.CommandText = "select user_img from naghashi where pic_name=@pic_name";
    command.Parameters.AddWithValue("@pic_name", comboBoxPicName.Text);
    connect.Open();
    using (var reader = command.ExecuteReader())
    {
    if (reader.Read())
    {
    bmp_image = (Bitmap)ByteToImage(reader["user_img"]);
    picedite.Invalidate();
    }
    }
    connect.Close();

  30. #30
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ




  31. #31
    کاربر دائمی آواتار HRC123
    تاریخ عضویت
    آذر 1387
    محل زندگی
    زیر آسمون خدا
    پست
    103

    نقل قول: مشکل در ذخیره نقاشی در دیتابیس با سی شارپ

    حل شد ممنونم

تاپیک های مشابه

  1. ساخت دیتابیس و استفاده از زبان SQL برای دسترسی به دیتابیس...
    نوشته شده توسط vahid1993 در بخش مسائل مرتبط با نصب و راه اندازی
    پاسخ: 1
    آخرین پست: سه شنبه 01 تیر 1395, 05:44 صبح
  2. پاسخ: 2
    آخرین پست: پنج شنبه 11 تیر 1394, 16:11 عصر
  3. پاسخ: 8
    آخرین پست: جمعه 30 خرداد 1393, 11:46 صبح
  4. تبدیل دیتابیس فاكس پرو (FoxPro) به دیتابیس (SQL SERVER 2008) با پشتیبانی از زبان فارسی
    نوشته شده توسط majid_darab در بخش مسائل مرتبط با نصب و راه اندازی
    پاسخ: 9
    آخرین پست: سه شنبه 15 فروردین 1391, 16:14 عصر

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

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