我正在研究Windows 8 Phone app
,我的应用程序中显示了一些图像,我拥有的图像非常大,质量很好,现在在我的应用程序中我需要调整图像大小而不会影响宽高比。
我搜索过它并找不到合适的灵魂。
如何实现这一目标?
这是我在.CS文件中的代码。
string imageName= "path to folder" + name + ".png";
BitmapImage bmp = new BitmapImage(new Uri(imageName, UriKind.Relative));
Image.Source = bmp;
修改
更多信息:目前我正在我的列表框中显示图像,因此图像看起来非常大,所以我想将其缩小到较小的尺寸而不影响图像的纵横比。
答案 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>