PDA

View Full Version : سوال: نحوه تغییر سایز تصویر در این تابع



دلتنگ اسمان
شنبه 05 مهر 1393, 18:36 عصر
با سلام
تصویری رو به این تابع پاس میدم و سایز متفاوتی رو برمیگردونه. میخوام بدونم چطوری تغییر میده ؟ و چطوری میشه مقادیر این سایز رو عوض کرد؟ ممنون

public static byte[] BitmapToByte(Image bmp, int width, int height)
{
using (var bmpNew = new Bitmap(bmp, new Size(width, height)))
{
using (var ms = new MemoryStream())
{
bmpNew.Save(ms, ImageFormat.Png);
return ms.ToArray();
}
}
}

hamid_hr
شنبه 05 مهر 1393, 18:49 عصر
خب اینطوری تغییر میکنه
new Bitmap(bmp, new Size(width, height))

مقادریشم با width, height ورودی تابع میشه عوض کرد

دلتنگ اسمان
شنبه 05 مهر 1393, 19:28 عصر
خب اینطوری تغییر میکنه
new Bitmap(bmp, new Size(width, height))

مقادریشم با width, height ورودی تابع میشه عوض کرد

پس چرا با کد زیر که میخوام سایز تصویر رو تغییر بدم هیچ تغییری انجام نمیشه؟ (اون عدد 500 رو و یا هر عدد دیگه ای رو بنویسم یا ننویسم تغییری ایجاد نمیشه)

foreach (string image in d.FileNames)
{
pict++;
PictureBox pb = new PictureBox();

pb.Image = new Bitmap(image);
pb.Name = d.FileNames[pict - 1];
pb.SizeMode = PictureBoxSizeMode.StretchImage;
w = pb.Image.Width + 500;
h = pb.Image.Height + 500;
MemoryStream ms = new MemoryStream(BitmapToByte(pb.Image, w, h));
pb.Image = Image.FromStream(ms);

flowLayoutPanel1.Controls.Add(pb);
}

hamid_hr
شنبه 05 مهر 1393, 19:48 عصر
pd.SizeMode = PictureBoxSizeMode.AutoSize;
اینو بزن ببین درست میشه؟

winner1
شنبه 05 مهر 1393, 19:55 عصر
Bitmpa bitmap =new Bitmap(my Image,with,height);

rahnema1
شنبه 05 مهر 1393, 20:18 عصر
برای تغییر اندازه تصویر از روش زیر استفاده کنید. همچنین غیر از NearestNeighbor گزینه های دیگه را هم امتحان کنید شاید برای کار شما مناسبتر باشه

float scaleX = 2f;
float scaleY = 2f;
Bitmap bmpNew = (bmp.Width*scaleX,bmp.Height*scaleY);
grbmpNew = Graphics.FromImage(bmpNew);
grbmpNew.InterpolationMode=System.Drawing.Drawing2 D.InterpolationMode.NearestNeighbor;
grbmpNew.PixelOffsetMode=System.Drawing.Drawing2D. PixelOffsetMode.Half;
grbmpNew.ScaleTransform(scaleX,scaleY);
grbmpNew.DrawImage(bmp,0f,0f,bmp.Width,bmp.Height) ;
bmpNew.Save(...

دلتنگ اسمان
شنبه 05 مهر 1393, 22:29 عصر
pd.SizeMode = PictureBoxSizeMode.AutoSize;
اینو بزن ببین درست میشه؟

تصویر خیلی بزرگ میشه و اسکرول فعال میشه.

دلتنگ اسمان
شنبه 05 مهر 1393, 22:52 عصر
برای تغییر اندازه تصویر از روش زیر استفاده کنید. همچنین غیر از NearestNeighbor گزینه های دیگه را هم امتحان کنید شاید برای کار شما مناسبتر باشه

float scaleX = 2f;
float scaleY = 2f;
Bitmap bmpNew = (bmp.Width*scaleX,bmp.Height*scaleY);
grbmpNew = Graphics.FromImage(bmpNew);
grbmpNew.InterpolationMode=System.Drawing.Drawing2 D.InterpolationMode.NearestNeighbor;
grbmpNew.PixelOffsetMode=System.Drawing.Drawing2D. PixelOffsetMode.Half;
grbmpNew.ScaleTransform(scaleX,scaleY);
grbmpNew.DrawImage(bmp,0f,0f,bmp.Width,bmp.Height) ;
bmpNew.Save(...

2f یعنی چی؟ حقیقتش خطاهاشو نتونستم برطرف کنم. بیشتر هم روی Bitmap bmpNew = (bmp.Width*scaleX,bmp.Height*scaleY); خطا داره.

rahnema1
یک شنبه 06 مهر 1393, 06:47 صبح
ببخشید اشتباه را اصلاح کردم
پسوند f هم برای این به کار میره که یک عدد به صورت float در نظر گرفته بشه ( مثلا اگه به جای 2 عدد 2.1 بود اگه f نمیذاشتیم خطا می داد)

float scaleX = 2f;
float scaleY = 2f;
Bitmap bmpNew = new Bitmap((int)(bmp.Width*scaleX) ,(int)(bmp.Height*scaleY));
Graphics grbmpNew = Graphics.FromImage(bmpNew);
grbmpNew.InterpolationMode= System.Drawing.Drawing2D. InterpolationMode.NearestNeighbor;
grbmpNew.PixelOffsetMode= System.Drawing.Drawing2D. PixelOffsetMode.Half;
grbmpNew.ScaleTransform( scaleX,scaleY);
grbmpNew.DrawImage(bmp,0f,0f, bmp.Width,bmp.Height) ;
bmpNew.Save(...