PDA

View Full Version : سوال: مشکلی غیر منطقی با دستور Graphic.DrawImage() **کمک لطفا**



malloc
سه شنبه 14 آذر 1391, 23:18 عصر
سلام دوستان.
واقعا این دستوره عصابمو ریخته بهم :عصبانی++:
دو ساعته دارم روش زور میزنم آخرم حرفه خودشو میزنه.

من با استفاده از چند خط دستوری یه عکسه کوچیکترو رو یه عکس بزرگتر قرار میدم و ذخیره میکنمش.

اون خطی که منو داغون کرده خطه زیره که نقشش کشیدن تصویر کوچکتر بر روی تصویر بزرگتره :

g.DrawImage(System.Drawing.Image.FromFile(Server.M apPath("~/data1/images/image1.jpg")), Width, Height);
مثلا:
تصویر بزرگ من 1000 در 500 هستش و تصویر کوچیک من 150 در 100 هستش.

خوب باید یجورایی شبیه تصویر زیر رسم کنه دیگه .
96030

اما نمیدونم چرا و واقعا نمیدونم چرا همون خط کدی که بالا نوشتم عکی دومی (همون عکس کوچیکه) رو کوچیکتر میکنه مثلا 150 در 100 رو میکنه 105 در 74!!!!!

بخاطر همین قضیه عکس کوچیکه وسط تصویر نمیافته

اینم نمونه پروژه :
96034

فقط وقتی از پروژه Run گرفتید دقت کنید که عکس index.jpg وسط نیست و عکس وسطیه از اورجینالش کوچکتر شده .

اگه متوجه نشدید بازم توضیح بدم

malloc
سه شنبه 14 آذر 1391, 23:29 عصر
میدونم سوالم طولانی و سخته . اما لپ مطلب اینه که پروژه موجود تو ضمیمه رو دانلود کنید و یجوری اون عکس و وسط چین کنید . ببینم چیکار میکنیدا . خیلی گیر کردم توش

malloc
سه شنبه 14 آذر 1391, 23:54 عصر
کسی نبود به نظری چیزی حرفی بزنه . :عصبانی++:

malloc
چهارشنبه 15 آذر 1391, 16:34 عصر
لطفا دوستان بیان و همکاری کنن نیاز دارم به این تابع

Mag-Mag
چهارشنبه 15 آذر 1391, 19:25 عصر
باید سایزشو ست کنی
ببین

using (System.Drawing.Image imgPhotoMain = System.Drawing.Image.FromFile(Server.MapPath("آدرس عکس اصلی")))
{
System.Drawing.Image imgPhoto = FixedSize(imgPhotoMain, ThumbWidth, ThumbHeight);
imgPhoto.Save(Server.MapPath("آدرس عکس جدید"), System.Drawing.Imaging.ImageFormat.Png);
imgPhoto.Dispose();
}

public static Image FixedSize(Image imgPhoto, int Width, int Height)
{
int sourceWidth = imgPhoto.Width;
int sourceHeight = imgPhoto.Height;
int sourceX = 0;
int sourceY = 0;
int destX = 0;
int destY = 0;

float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;

nPercentW = ((float)Width / (float)sourceWidth);
nPercentH = ((float)Height / (float)sourceHeight);
if (nPercentH < nPercentW)
{
nPercent = nPercentH;
destX = System.Convert.ToInt16((Width - (sourceWidth * nPercent)) / 2);
}
else
{
nPercent = nPercentW;
destY = System.Convert.ToInt16((Height - (sourceHeight * nPercent)) / 2);
}

int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);

Bitmap bmPhoto = new Bitmap(Width, Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb) ;
bmPhoto.SetResolution(imgPhoto.HorizontalResolutio n, imgPhoto.VerticalResolution);

Graphics grPhoto = Graphics.FromImage(bmPhoto);
grPhoto.Clear(Color.White);
grPhoto.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQua lityBicubic;

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

grPhoto.Dispose();
return bmPhoto;
}

malloc
چهارشنبه 15 آذر 1391, 19:43 عصر
این تابعی که گفتی چیه و چیکار میکنه /. منظورم اینه که هیچ ربطی به تابعی که من نوشتم نداشت .

والا من که اومدم تستش کنم نمیفهمم چطوری کار میکنه . اگه میتونی سورسشو تو یه پروژه نمونه واسم بزار

Mag-Mag
چهارشنبه 15 آذر 1391, 19:49 عصر
این تابع عکس دومی که می خوای بزاری رو دقیقا ه همون اندازه ای در میاره که می خوای
مگه نمی گی میخوای 150 در 100 باشه ولی میکنش 105 در 74!!!!!
اون اهایی که خطا میده باید کتابخونه هاشو add کنی
موس و روش نگه دار
کتابخونش میاد
مثلا
using System.Drawing;

malloc
چهارشنبه 15 آذر 1391, 20:00 عصر
حل شد دادش واقعا دمت گرم .
فقط نکته ای که میمونه اینه که این تابع یجورایی عکس و کش میده تا از یه سمتی به انتها برسه . اما من میخوام عکس دومی(کوچیکه) دقیقا همسایز اورجینالش تو عکس اولی(بکگراند) بیافته
یعنی میخوام که خروجی مثل عکس زیر باشه :
96100

اما خروجی این تابع اینجوریه :
96101

اگه تونستی در این رابطه هم کمک کن.

در کل Like داری دادش:تشویق:

Mag-Mag
پنج شنبه 16 آذر 1391, 10:12 صبح
خداروشکر
یه تشکر می زدی حداقل!!!!!!!
فک کنم اگر پسوندشو عوض کنی درست بشه
الان داره png دخیره می کنه عکس دوم رو
با پسوند های دیگه هم امنحان کن

malloc
پنج شنبه 16 آذر 1391, 13:14 عصر
اوکی و شرمنده من معمولا تشکر و میزنم اما یادم رفت . مرسی