PDA

View Full Version : ساخت bitmap



FreeMagic
یک شنبه 24 دی 1391, 19:15 عصر
سلام
من چند تا picturebox دارم که هرکدوم یه سایز هستن (و با تغییر سایز فرم سایز اونا هم تغییر میکنه)
حالا میخواستم که اون pictureboxها رو در یک شی bitmap قرار بدم و بعد همون یک bitmap رو به عنوان پس زمینه فرم قرار بدم
برای انجام این کار چه کار باید بکنم؟
کار گرافیکی بلد نیستم:ناراحت:

the king
یک شنبه 24 دی 1391, 19:55 عصر
سلام
من چند تا picturebox دارم که هرکدوم یه سایز هستن (و با تغییر سایز فرم سایز اونا هم تغییر میکنه)
حالا میخواستم که اون pictureboxها رو در یک شی bitmap قرار بدم و بعد همون یک bitmap رو به عنوان پس زمینه فرم قرار بدم
برای انجام این کار چه کار باید بکنم؟
کار گرافیکی بلد نیستم:ناراحت:

Bitmap حافظه تصویری است، کنترل نیست که بخواهید کنترل ای مثل PictureBox را داخلش قرار دهید. در Bitmap می توانید هر
شکل و تصویری را رسم کنید، اما هیچ شیء مستقلی داخلش قرار نمی گیرد.

FreeMagic
یک شنبه 24 دی 1391, 20:10 عصر
Bitmap حافظه تصویری است، کنترل نیست که بخواهید کنترل ای مثل PictureBox را داخلش قرار دهید. در Bitmap می توانید هر
شکل و تصویری را رسم کنید، اما هیچ شیء مستقلی داخلش قرار نمی گیرد.

منظور منم همون تصویری هست که داخل picturebox قرار داره
شما این کد رو نگاه کنید


Color clr; int i,j,x,y;
Bitmap btmp = new Bitmap(this.ClientSize.Width,this.ClientSize.Heigh t);

bmp = new Bitmap(pictureBox1.Image);
for (i = 0; i < bmp.Width; i++)
{
for (j = 0; j < bmp.Height; j++)
{
clr = bmp.GetPixel(i, j);
x = btmp.Width - bmp.Width + i;
y = btmp.Height - bmp.Height + j;
btmp.SetPixel(x, y, clr);
}
}

this.BackgroundImage = btmp;

من تقریبا از این کد جواب گرفتم (البته 6 تا picturebox هستن که برای هرکدوم قطعه کد مشابه تکرار شده) ضمنا عکس و سایز picturebox هم قبلا مشخص شده و مشکلی نداره
در ضمن bmp هم قبلا تعریف شده بود.
فعلا 2 تا مشکل داره
1- با این روش سرعت خیلی کند هست چون باید نقطه به نقطه پیکسل ها رو بخونه. اگر بشه پیکسل های یک محیط رو بخونه و در bitmap دیگه قرار بده بهتر میشه
2- در bitmap اصلی که قرار پس زمینه فرم بشه پیکسل ها در جای خودشون نیستن
اگه این 2 تا درست بشه کار من راه میفته:افسرده:

the king
یک شنبه 24 دی 1391, 20:21 عصر
هر کار دیگری که قراره انجام بشه داخل همون بلوک using انجام دهید، فرض رو بر این قرار دادم که PictureBox تون AutoSize ئه :

Bitmap bmp = new Bitmap(this.ClientSize.Width, this.ClientSize.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(this.BackColor);
Rectangle rect = new Rectangle(Point.Empty, pictureBox1.Image.Size);
g.DrawImage(pictureBox1.Image, pictureBox1.Bounds, rect, GraphicsUnit.Pixel);
}
this.BackgroundImage = bmp;

FreeMagic
یک شنبه 24 دی 1391, 20:34 عصر
هر کار دیگری که قراره انجام بشه داخل همون بلوک using انجام دهید، فرض رو بر این قرار دادم که PictureBox تون AutoSize ئه :

Bitmap bmp = new Bitmap(this.ClientSize.Width, this.ClientSize.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(this.BackColor);
Rectangle rect = new Rectangle(Point.Empty, pictureBox1.Image.Size);
g.DrawImage(pictureBox1.Image, pictureBox1.Bounds, rect, GraphicsUnit.Pixel);
}
this.BackgroundImage = bmp;


ببخشید من نتونستم جواب درستی بگیرم:افسرده:
اولین بار هست که بلوک using رو میبینم
میشه شما فرض کنید که 6 تا picturebox هست که کنار هم قرار گرفتن و با توجه به اونا باید پس زمینه رو ساخت و با این فرض کد رو کامل کنید؟
ممنون بابت زحماتتون:قلب:

FreeMagic
یک شنبه 24 دی 1391, 20:43 عصر
به این عکس که ضمیمه کردم نگاه کنید
من 6 تا picturebox با موقعیت و سایز مشابه دارم
اونایی که سفید هستن سایزشون ثابت هست.
اونایی که زرد هستن سایزشون با تغییر سایز فرم تغییر میکنه
و البته با تغییر سایز تقریبا موقعیت همه تغییر میکنه
حالا میخوام همه اینا تبدیل به یه bitmap بشه و اونم پس زمینه فرم
با اون کدی که نوشته بودید نتونستم هر 6 تا picturebox رو به یه bitmap تبدیل کنم
ممنون میشم بیشتر کمکم کنید
98359

the king
یک شنبه 24 دی 1391, 20:56 عصر
ببخشید من نتونستم جواب درستی بگیرم:افسرده:
اولین بار هست که بلوک using رو میبینم
میشه شما فرض کنید که 6 تا picturebox هست که کنار هم قرار گرفتن و با توجه به اونا باید پس زمینه رو ساخت و با این فرض کد رو کامل کنید؟
ممنون بابت زحماتتون:قلب:


Bitmap bmp = new Bitmap(this.ClientSize.Width, this.ClientSize.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(this.BackColor);
Rectangle rect = new Rectangle(Point.Empty, pictureBox1.Image.Size);
g.DrawImage(pictureBox1.Image, pictureBox1.Bounds, rect, GraphicsUnit.Pixel);
rect = new Rectangle(Point.Empty, pictureBox2.Image.Size);
g.DrawImage(pictureBox2.Image, pictureBox2.Bounds, rect, GraphicsUnit.Pixel);
rect = new Rectangle(Point.Empty, pictureBox3.Image.Size);
g.DrawImage(pictureBox3.Image, pictureBox3.Bounds, rect, GraphicsUnit.Pixel);
rect = new Rectangle(Point.Empty, pictureBox4.Image.Size);
g.DrawImage(pictureBox4.Image, pictureBox4.Bounds, rect, GraphicsUnit.Pixel);
rect = new Rectangle(Point.Empty, pictureBox5.Image.Size);
g.DrawImage(pictureBox5.Image, pictureBox5.Bounds, rect, GraphicsUnit.Pixel);
rect = new Rectangle(Point.Empty, pictureBox6.Image.Size);
g.DrawImage(pictureBox6.Image, pictureBox6.Bounds, rect, GraphicsUnit.Pixel);
}
this.BackgroundImage = bmp;