2009-10-01 199 views

回答

1

以下链接可以帮助你:)

snippets.dzone.com/posts/show/4336

更新:在链接上面的代码物理调整大小,如果你的目的是要调整图像文件,以节省空间,节省了图像,否则如上所述,您可以手动设置图像控件上的高度/宽度。

0

如果你加载一个图像,那么你可以只设置宽度/高度属性。

例如

Bitmap bmp = new Bitmap(@"c:\myfile.bmp"); 
bmp.Width = (int)(bmp.Width/2); 
bmp.Height = (int)(bmp.Height/2); 
0

加载到gdi +(system.drawing)和scale?

-2

从我个人的代码库。无论如何,有点老。

protected Image FixedSize(Image imgPhoto, int Width, int Height) 
{ 
    int width = imgPhoto.Width; 
    int height = imgPhoto.Height; 
    int x = 0; 
    int y = 0; 
    int num5 = 0; 
    int num6 = 0; 
    float num7 = 0f; 
    float num8 = 0f; 
    float num9 = 0f; 
    num8 = ((float) Width)/((float) width); 
    num9 = ((float) Height)/((float) height); 
    if (num9 < num8) 
    { 
     num7 = num9; 
     num5 = Convert.ToInt16((float) ((Width - (width * num7))/2f)); 
    } 
    else 
    { 
     num7 = num8; 
     num6 = Convert.ToInt16((float) ((Height - (height * num7))/2f)); 
    } 
    int num10 = (int) (width * num7); 
    int num11 = (int) (height * num7); 
    Bitmap image = new Bitmap(Width, Height, PixelFormat.Format24bppRgb); 
    image.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution); 
    Graphics graphics = Graphics.FromImage(image); 
    graphics.Clear(ColorTranslator.FromHtml("#ffffff")); 
    graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; 
    graphics.DrawImage(imgPhoto, new Rectangle(num5, num6, num10, num11), new Rectangle(x, y, width, height), GraphicsUnit.Pixel); 
    graphics.Dispose(); 
    return image; 
} 
+1

-1:num1,num2,num3,... num11。没有冒犯,但变量名称的选择会像代码被有目的地混淆。 – Juliet 2009-10-01 14:19:59

+0

这是一些严重的WTF代码:变量名称,Convert.ToInt16,ColorTranslators.FromHtml。我会避免低调投票,因为至少你得到了InterpolationMode。 – MusiGenesis 2009-10-01 14:44:27

+0

Kidooosss ...此代码来自.NET Reflector。我有复制粘贴的想法。意图是只显示逻辑。评分...你的选择。 :-) – NinethSense 2009-10-05 10:18:47

0

在additiona别人所说的话,比300x300的较小的图像,Image.GetThumbnailImage十分便利:

static void Main(string[] args) 
{ 
    Bitmap b = new Bitmap(@"C:\Documents and Settings\juliet\My Documents\My Pictures\julietawesome.bmp"); 
    Image image = b.GetThumbnailImage(100, 100, null, IntPtr.Zero); 
    image.Save(@"C:\Documents and Settings\juliet\My Documents\My Pictures\thumbnail.bmp", ImageFormat.Bmp); 
} 
0

由于没有其他人这样说:尝试WPF。

0
Public Function ScaleByPercent(ByVal imgPhoto As Image, ByVal Percent As Integer) As Image 

     Dim nPercent As Single = (CType(Percent, Single)/100) 
     Dim sourceWidth As Integer = imgPhoto.Width 
     Dim sourceHeight As Integer = imgPhoto.Height 
     Dim sourceX As Integer = 0 
     Dim sourceY As Integer = 0 

     Dim destX As Integer = 0 
     Dim destY As Integer = 0 
     Dim destWidth As Integer = CType((sourceWidth * nPercent), Integer) 
     Dim destHeight As Integer = CType((sourceHeight * nPercent), Integer) 

     Dim bmPhoto As New Bitmap(destWidth, destHeight, PixelFormat.Format24bppRgb) 
     bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution) 

     Dim grPhoto As Graphics = 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 

    End Function 
+0

请注意,在对图像大小进行重大更改时,GDI调整大小算法会产生平庸的结果。我过去编写了类似的代码,然后切换到第三方库以获得更好的质量调整算法。 – ScottS 2009-10-01 21:33:49