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

نام تاپیک: اضافه کردن یک لایه به عکس

  1. #1
    کاربر دائمی آواتار rsheytoonak
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شیراز
    پست
    150

    اضافه کردن یک لایه به عکس

    سلام
    من یه عکس رو ریختم تو یه متغیر از نوه image حلا میخام رنگ تک تک پیکسل ها رو بگیرم به رنگ مثلآ آبیش 5 واحد اضافه کنم یعنی یه لایه آبی بکشم رو عکس بعد تو یه picturebox نشونش بدم کسی میتونه راهنماییم کنه

  2. #2
    کاربر دائمی آواتار tthenry14plus
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    Tehran
    پست
    218

    using System.Drawing.Imaging;


    Bitmap bmp = new Bitmap(picturebox1.Image);

    //read
    Color c = bmp.GetPixel(1, 1);

    //write
    bmp.SetPixel(2, 2, c);



    private void GetPixel_Example(PaintEventArgs e)
    {

    // Create a Bitmap object from an image file.
    Bitmap myBitmap = new Bitmap("Grapes.jpg");

    // Get the color of a pixel within myBitmap.
    Color pixelColor = myBitmap.GetPixel(50, 50);

    // Fill a rectangle with pixelColor.
    SolidBrush pixelBrush = new SolidBrush(pixelColor);
    e.Graphics.FillRectangle(pixelBrush, 0, 0, 100, 100);
    }

    به نقل از آقای SinPin و ایشون به نقل از :

    http://msdn2.microsoft.com/en-us/library/system.drawing.bitmap.getpixel.aspx

  3. #3
    سلام
    من 1 برنامه نوشتم که 1 عکس رو باز میکنه و 4 تا ترک ویو برا رنگای قرمز و ابی و سبز و الفا

    با حرکت دادن این ترک ویو ها عکس لایه ای به همون رنگ میگیره
    حالا مسئله اینجاس که سرعتش خیلی کمه
    این کد منه
    Image img;
    Color c;
    public Form2()
    {
    InitializeComponent();

    }
    privatevoid button1_Click(object sender, EventArgs e)
    {

    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
    img = System.Drawing.Image.FromFile(openFileDialog1.FileName);
    pictureBox1.Image = img;
    pictureBox2.Image = img;
    button1.Text = trackBar1.Value.ToString() + "," + trackBar2.Value.ToString() + "," + trackBar3.Value.ToString() + "," + trackBar1.Value.ToString();
    trackBar1.Enabled = trackBar2.Enabled = trackBar3.Enabled = trackBar4.Enabled = true;
    trackBar5.Enabled = trackBar6.Enabled = trackBar7.Enabled = trackBar8.Enabled = true;
    }
    }
    privatevoid trackBar1_ValueChanged(object sender, EventArgs e)
    {
    Bitmap bmp = newBitmap(img);
    pictureBox1.Image = img;
    for (int i = 1; i < img.Width; i++)
    for (int j = 1; j < img.Height; j++)
    {
    c = bmp.GetPixel(i, j);
    c.ToArgb();
    c = Color.FromArgb(trackBar1.Value, bmp.GetPixel(i, j).R, bmp.GetPixel(i, j).G, bmp.GetPixel(i, j).B);
    bmp.SetPixel(i, j, c);
    }
    pictureBox2.Image = bmp;
    button1.Text = trackBar1.Value.ToString() + "," + trackBar2.Value.ToString() + "," + trackBar3.Value.ToString() + "," + trackBar1.Value.ToString();
    }
    privatevoid trackBar2_ValueChanged(object sender, EventArgs e)
    {
    Bitmap bmp = newBitmap(img);
    pictureBox1.Image = img;
    for (int i = 1; i < img.Width; i++)
    for (int j = 1; j < img.Height; j++)
    {
    c = bmp.GetPixel(i, j);
    c.ToArgb();
    c = Color.FromArgb(bmp.GetPixel(i, j).A, bmp.GetPixel(i, j).R, trackBar2.Value, bmp.GetPixel(i, j).B);

    bmp.SetPixel(i, j, c);
    }
    pictureBox2.Image = bmp;
    button1.Text = trackBar1.Value.ToString() + "," + trackBar2.Value.ToString() + "," + trackBar3.Value.ToString() + "," + trackBar1.Value.ToString();

    }
    privatevoid trackBar3_ValueChanged(object sender, EventArgs e)
    {
    Bitmap bmp = newBitmap(img);
    pictureBox1.Image = img;
    for (int i = 1; i < img.Width; i++)
    for (int j = 1; j < img.Height; j++)
    {
    c = bmp.GetPixel(i, j);
    c.ToArgb();
    c = Color.FromArgb(bmp.GetPixel(i, j).A, trackBar3.Value, bmp.GetPixel(i, j).G, bmp.GetPixel(i, j).B);

    bmp.SetPixel(i, j, c);
    }
    pictureBox2.Image = bmp;
    button1.Text = trackBar1.Value.ToString() + "," + trackBar2.Value.ToString() + "," + trackBar3.Value.ToString() + "," + trackBar1.Value.ToString();
    }
    privatevoid trackBar4_ValueChanged(object sender, EventArgs e)
    {
    Bitmap bmp = newBitmap(img);
    pictureBox1.Image = img;
    for (int i = 1; i < img.Width; i++)
    for (int j = 1; j < img.Height; j++)
    {
    c = bmp.GetPixel(i, j);
    c.ToArgb();
    c = Color.FromArgb(bmp.GetPixel(i, j).A, bmp.GetPixel(i, j).R, bmp.GetPixel(i, j).G, trackBar4.Value);
    bmp.SetPixel(i, j, c);
    }
    pictureBox2.Image = bmp;
    button1.Text = trackBar1.Value.ToString() + "," + trackBar2.Value.ToString() + "," + trackBar3.Value.ToString() + "," + trackBar1.Value.ToString();

    }


    تقریبا 10-15 ثانیه طول میکشه تا جواب بده که خیلی زیاده
    فایل های ضمیمه فایل های ضمیمه

  4. #4
    کاربر دائمی آواتار tthenry14plus
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    Tehran
    پست
    218
    خوب مسلمه، شما از دوحلقه تودرتو استفاده کردید و داخل حلقه هم پیکسلو می خوانید و روش می نویسید، اگر تصویر 1024*768 هم باشه خودت حساب کن ببین چندبار باید این کارو انجام بده. یک مشکل ویژوال استادیو همین سرعتشه در مورد کارهای گرافیکی.

  5. #5
    منم همینو میگم راه دیگهای نداره؟؟؟
    تابعی یا کامپوننتی یا هر چیزی که سرعت کار رو ببره بالا اخه اینجوری که نمیشه!!!

  6. #6
    الان 1 فکری به سرم زد
    میشه تو 1 صفحه جدا اندازه عکسو کوچیک کرد بعد رنگا رو بهش اعمال کرد و بعد از زدن دکمه save نتیجه رو فرم اصلی با اندازه واقعی عکس نشون داده بشه
    اینجوری فقط 1 بار طول میکشه تا افکت اعمال بشه
    اما اندازه عکسو چطوری کوچیک کنم؟؟؟
    میشه کمکم کنید؟؟؟

  7. #7

  8. #8
    سریع ترین راه برای دستکاری تصویر در دات نت (#C) استفاده از بلوک unsafe و متد LockBits و UnlockBits کلاس System.Drawing.Bitmap است!
    در اکثر کتابخانه های پردازش تصویر از این روش استفاده شده است.

    مثال: Faster pixel manipulation

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

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