如何在不影响宽高比的情况下调整图像大小

时间:2014-02-14 12:31:04

标签: c# wpf image windows-phone-8 windows-phone

我正在研究Windows 8 Phone app,我的应用程序中显示了一些图像,我拥有的图像非常大,质量很好,现在在我的应用程序中我需要调整图像大小而不会影响宽高比。

我搜索过它并找不到合适的灵魂。

如何实现这一目标?

这是我在.CS文件中的代码。

string imageName= "path to folder" + name + ".png";
BitmapImage bmp = new BitmapImage(new Uri(imageName, UriKind.Relative));
Image.Source = bmp;

修改

更多信息:目前我正在我的列表框中显示图像,因此图像看起来非常大,所以我想将其缩小到较小的尺寸而不影响图像的纵横比。

4 个答案:

答案 0 :(得分:3)

如果您想将缩小的图片加载到内存中,请设置DecodePixelWidth而不设置 DecodePixelHeight(或其他方式)

BitmapImage bitmapImage = new BitmapImage();
bitmapImage.DecodePixelWidth = 80; 
bitmapImage.UriSource = new Uri(imageName, UriKind.Relative);

修改

或者,如果您想将高分辨率图像保留在Image控件的内存集大小中。

<Image ... Width="80"/>

Stretch属性默认设置为Uniform,表示:

  

调整内容的大小以适应目标维度,同时保留其原始宽高比。

答案 1 :(得分:1)

这应该做:

static void Main(string[] args)
    {
        int _newWidth = 60; //the new width is set, the height will be calculated

        var originalImage = Bitmap.FromFile(@"C:\temp\source.png");

        float factor = originalImage.Width / (float)_newWidth;
        int newHeight = (int)(originalImage.Height / factor);

        Bitmap resizedImage = ResizeBitmap(originalImage, _newWidth, newHeight);

        resizedImage.Save(@"c:\temp\target.png");
    }

    private static Bitmap ResizeBitmap(Image b, int nWidth, int nHeight)
    {
        Bitmap result = new Bitmap(nWidth, nHeight);
        using (Graphics g = Graphics.FromImage(result))
            g.DrawImage(b, 0, 0, nWidth, nHeight);
        return result;
    }

答案 2 :(得分:1)

如果您想在显示屏上按比例缩小图像尺寸,请尝试使用图像控件的Stretch属性进行演示,并在this blog post中进行了很好的解释。

<Image x:Name="Image" Stretch="UniformToFill"></Image>

答案 3 :(得分:0)

图像元素的大小受其包含的面板的影响,但这应该适用于任何面板。

<Grid>
    <Image Source='flower.png' Width='120' Stretch='Uniform'/>
  </Grid>