webForumDet fria alternativet

Ändra storlek på bild - får ramlinje

.NET

4 svar · 418 visningar · startad av hoolaboola

Medlem sedan mars 200827 inlägg
Frågan#1

jag har en kod som laddar upp en bild samt ändrar storlek på bilden. Men den lämnar en vit ramlinje antingen upptill eller på sidorna (beroende på om det är en stående eller liggande bild. Någo som vet hur man kan greja till det. Här kommer koden:

//Function For Image
private Bitmap ResizeImage(Bitmap mg, Size newSize)
{
double ratio = 0d;
double myThumbWidth = 0d;
double myThumbHeight = 0d;
int x = 0;
int y = 0;

Bitmap bp;

if ((mg.Width / Convert.ToDouble(newSize.Width)) > (mg.Height /
Convert.ToDouble(newSize.Height)))
ratio = Convert.ToDouble(mg.Width) / Convert.ToDouble(newSize.Width);
else
ratio = Convert.ToDouble(mg.Height) / Convert.ToDouble(newSize.Height);
myThumbHeight = Math.Ceiling(mg.Height / ratio);
myThumbWidth = Math.Ceiling(mg.Width / ratio);

Size thumbSize = new Size((int)myThumbWidth, (int)myThumbHeight);
bp = new Bitmap(newSize.Width, newSize.Height);
x = (newSize.Width - thumbSize.Width) / 2;
y = (newSize.Height - thumbSize.Height);
// Had to add System.Drawing class in front of Graphics ---
System.Drawing.Graphics g = Graphics.FromImage(bp);
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMod

Rectangle rect = new Rectangle(x, y, thumbSize.Width, thumbSize.Height);
g.FillRectangle(Brushes.White, 0, 0, mg.Width, mg.Height);
g.DrawImage(mg, rect, 0, 0, mg.Width, mg.Height, GraphicsUnit.Pixel);

return bp;
}
//End Function For Image

Calling code:
Size newSize = new Size(imageWidth, imageHeight);
Bitmap bp = ResizeImage(mg, newSize);
bp.Save(Server.MapPath(".\\images\\Thumb\\" + StrFileName), System.Drawing.Imaging.ImageFormat.Jpeg);
bp.Dispose();

Medlem sedan sep. 2005673 inlägg
#2

Ta bort den här raden skulle jag tro: g.FillRectangle(Brushes.White, 0, 0, mg.Width, mg.Height);

Medlem sedan mars 200827 inlägg
#3

Då blir ramen svart. Som är default. Men jag vill itne ha någon alls.

Medlem sedan sep. 2005673 inlägg
#4

Det är antagligen nåt avrundningsfel någonstans, är thumbSize.Width, thumbSize.Height samma som mg.Width, mg.Height när du skriver bilden? En fuling kanske, men om du gör så här, slipper du ramen då?

Rectangle rect = new Rectangle(x, y, thumbSize.Width - 1, thumbSize.Height - 1);

Medlem sedan mars 200827 inlägg
#5

Det är inte bara en pixel utan det blir lite olika beroende på hur bilden ser ut.

251 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)