PDA

View Full Version : حرفه ای: تغییر سایز تصویر



hamid_73
شنبه 16 اسفند 1393, 22:42 عصر
با سلام
دوستان من عکس های سنگین که لایه باز هم هستن رو می خوام سایزشون رو کم کنم و به صورت jpeg ذخیره کنم ولی رو بیشتر سیستم ها برناه قفل می کنه و خیلی طول میکشه تا فایل ها رو کم هجم کنه و سایزشون رو کم کنه بعضی مواقع هم out of memory میده
عکس هایی کا باید کم حجم بشن عکس ها بنری هستن وس حجمشون بالا 400 مگابایت هستن
من از این کد استفاده کردم برای این کار

static Image ScaleByPercent(Image imgPhoto, int Percent)
{
//float nPercent = ((float)Percent / 100);

int sourceWidth = imgPhoto.Width;
int sourceHeight = imgPhoto.Height;
int sourceX = 0;
int sourceY = 0;

int destX = 0;
int destY = 0;
int destWidth = (int)(sourceWidth / Percent);
int destHeight = (int)(sourceHeight / Percent);

Bitmap bmPhoto = new Bitmap(destWidth, destHeight, PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(imgPhoto.HorizontalResolutio n, imgPhoto.VerticalResolution);

Graphics grPhoto = Graphics.FromImage(bmPhoto);
grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;

grPhoto.DrawImage(imgPhoto,
new Rectangle(destX, destY, destWidth, destHeight),
new Rectangle(sourceX, sourceY, sourceWidth, sourceHeight),
GraphicsUnit.Pixel);

grPhoto.Dispose();
return bmPhoto;
}

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

var image = Bitmap.FromFile(ofdup.FileName);
var newImage = ScaleByPercent(image, 2);
newImage.Save(Application.StartupPath + "\\Data\\LowerImage\\" + namefile2 + "r.jpg", ImageFormat.Jpeg);

تو سیستم خودم که تو این خط کد

var image = Bitmap.FromFile(ofdup.FileName);

خطای out of memory میده

elec60
یک شنبه 17 اسفند 1393, 05:23 صبح
برای کار با تصاویر بزرگ کلاس Bitmap دارای Overhead خیلی بالایی هست و اصلا مناسب نیست.
حتما باید از روشهای unsafe (کار با اشاره گرها) استفاده کنی.
تو Stackoverflow سرچ کنی وجود داره.

rahnema1
یک شنبه 17 اسفند 1393, 08:00 صبح
سلام
برای کار با این تصاویر کتابخانه های مخصوص لازمه مثل کتابخانه GDAL (http://www.gisinternals.com/release.php)
که به زبانهای مختلف از جمله #C هم میتونه رابطه برقرار کنه
همچنین داخلش برنامه ای هست به نام gdal_translate که مثلا بخواهید سایز تصویر را به 30% هم در جهت طول و هم در جهت عرض کاهش بدید اینجور عمل کنید:
gdal_translate.exe -of JPEG -outsize 30% 30% input.tif output.jpg

nasimplus
جمعه 11 اردیبهشت 1394, 15:12 عصر
من یه برنامه تغییر سایز رو دانلود کردم اما اولش using InsertShowImage;
رو داره که زیرش رو قرمز میکنه.چرا؟
مگه مال سی شارپ نیست این کتابخانه؟