`

Metro style .net app Image控件的使用

 
阅读更多

Image 元素:
Object
      |------DependencyObject
             | -----UIElement

|--------FrameworkElement

|---------Image

常见用法:<Image Source="Assets/Logo.png" />
其中image.Source是一个ImageSource类型:
Object
       |----- DependencyObject

   |----- ImageSource

|------BitmapSource

|-----BitmapImage

|-----WriteableBitmap

 

ImageSource包含(封装)了实际要显示的图片,但是它本身是个抽象类,不能被实例化,需要它的继承类来初始化。其中BitmapSource也是抽象类(抽象位图,以像素为单位来描述自身的宽和高,这样的信息都被编码在了位图文件中),不能初始化,但是它的PixelWidth和PixelHeight属性说明图片在加载成功后的大小.而它的SetSource(IRandomAccessStream streamSource)方法可以让你从文件或网络流中读取Bitmap数据。
BitmapImage继承了BitmapSource,并且还添加了支持URI的UriSource属性。它的构造函数也支持传递URI对象来实例化自己。
示例代码:

 

Uri uri = new Uri("http://www.charlespetzold.com/pw6/PetzoldJersey.jpg"); 
BitmapImage bitmap = new BitmapImage(uri); 
Image image = new Image();
 image.Source = bitmap; 
contentGrid.Children.Add(image);

 

 

 使用Http下载图片流进行初始化:

 

HttpClient httpClient = new HttpClient( new HttpClientHandler());
 async Task<IRandomAccessStream> getImageStream(string url)
 {
   Stream stream=await httpClient.GetStreamAsync(url);
 var randomAccessStream = new Windows.Storage.Streams.InMemoryRandomAccessStream();
 awaitRandomAccessStream.CopyAsync(stream.AsInputStream(),randomAccessStream.GetOutputStreamAt(0));
 stream.Dispose();
     return randomAccessStream;
       }
async void foo(Uri IconUri){

Image img = new Image();
                  BitmapImage bitmapImage = new BitmapImage();
                  bitmapImage.SetSource(await getImageStream(IconUri));
                  img.Source=bitmapImage;
                     img.MaxWidth = 60;
                    img.MaxHeight = 60;
                    img.Stretch = Windows.UI.Xaml.Media.Stretch.UniformToFill;
                 bitmapImage.ImageOpened+=(o,e)=>{//确保BitmapImage的宽高已经有值
                    int w = bitmapImage.PixelWidth > 60 ? 60 : bitmapImage.PixelWidth;
                    int h = bitmapImage.PixelHeight > 60 ? 60 : bitmapImage.PixelHeight;
                  }            
}

  

 

 Stretch属性的四个值:

None 显示图片保持原始大小
Fill 重新对图片设置大小来填充目标大小
Uniform 按原图宽高比例就行缩放填充适应目标
UniformToFill 按原图宽高比例进行缩放填充,但是可能因为不适合目标比例而被部分截断

 



DecodePixelHeight和Width属性:
若设置了BitmapImage的这两个值,那么将会加载指定大小的图片,即放弃原有图片的大小和高宽比例。否则加载的图片的高宽比将不变,然后根据Stretch进行缩放。
JPEG和PNG解码器解析图片到指定的大小。而其他的解码器则加载图片的原始大小,然后缩放到目标大小。
示例代码:

 

 

using (IRandomAccessStream fileStream = await        file.OpenAsync(Windows.Storage.FileAccessMode.Read))
                {
                    // Set the image source to the ed bitmap
                    BitmapImage bitmapImage = new BitmapImage();
                    bitmapImage.DecodePixelHeight = decodePixelHeight;
                    bitmapImage.DecodePixelWidth = decodePixelWidth;
                    bitmapImage.SetSource(fileStream);
                  FooImage.Source = bitmapImage;                
                }

 

 

 参考资料:the 6th edition of Programming Windows,Charles Petzold

分享到:
评论

相关推荐

    MahApps.Metro+.net 5

    在.NET 5中,MahApps.Metro提供了一系列的控件和样式,这些控件包括但不限于按钮、文本框、滑块、进度条、提示对话框等,它们都带有丰富的动画效果和自定义选项。开发者可以通过简单的API调用或XML配置来改变控件的...

    asp.net Metro样式界面源码

    【标签】:“Metro asp.net”标签进一步强调了这个项目的核心特征,即结合了ASP.NET技术与Metro设计风格,这可能意味着源码包含了一些特定的控件或库,如 metro UI CSS 或 metro bootstrap,以实现与Windows 8 UI...

    .net换皮肤控件

    在.NET框架下,开发Windows应用程序时,为了提升用户体验和视觉效果,可以使用皮肤控件来实现界面的美化。本文将详细介绍如何在C# WinForm程序中应用皮肤控件,以及如何利用提供的60多种不同风格的皮肤进行界面设计...

    MahApps.Metro源码(WPF开源控件库)

    在WPF项目中使用MahApps.Metro,首先需要添加对MahApps.Metro的NuGet包引用,然后在App.xaml文件中导入相应的资源字典,并设置应用程序的基本样式。例如: ```xml &lt;Application x:Class="YourNamespace.App" xmlns=...

    zTree主题 bootstrapStyle、metroStyle等

    在本压缩包中,提供了三种不同的主题风格,分别为bootstrapStyle、zTreeStyle和metroStyle,旨在满足不同项目和用户界面的需求。 首先,我们来详细了解一下`bootstrapStyle`。Bootstrap是Twitter开发的一款开源前端...

    VB.NET制作Windows8 MetroUI Form 风格界面

    在VB.NET中,我们可以选择使用无边框(BorderStyle = None)的Form,并且调整控件的边缘样式,使其看起来更加扁平。 3. **大图标和清晰文字**:为了适应触摸操作,控件和按钮的图标应该较大,文字清晰易读。可以...

    Win8 Metro Style App Automation Implement Source code

    本文将基于提供的"Win8 Metro Style App Automation Implement Source code",深入探讨如何封装DLL并进行 Metro 应用的自动化测试。 首先,我们需要理解“DLL”(动态链接库)的概念。DLL是一种共享库,它包含可由...

    Windows 8 Developer Preview Metro style app samples.zip

    【Windows 8 Developer Preview Metro style app samples】 这个压缩包文件包含了一系列Windows 8开发者预览版的 Metro 风格应用示例。这些示例旨在帮助开发者理解和掌握如何在Windows 8平台上创建现代化、触控友好...

    Metro Style Using XAML Note

    下面将详细介绍Windows 8 Metro Style使用XAML的关键技术和经验分享。 #### 1. XAML支持与控制模型 XAML在Windows 8 Metro Style应用中的使用非常广泛。它提供了一种统一的方式来描述用户界面和数据绑定逻辑。对于...

    dev控件的Metro界面

    在描述中提到的“用vs.net WINFORM做Metro界面”,意味着开发者使用了VS.NET的工具和.NET Framework,通过编写代码实现了与Windows 8 Metro风格类似的用户界面。 【标签】:“DotNetBar” DotNetBar是Dev ...

    酷炫的Metro风格的开源项目MahApps.Metro.zip

    MahApps.Metro是一款酷炫的Metro风格的WPF UI控件库。MahApps.Metro入门文档地址:http://mahapps.com/guides/quick-start.html 源码地址:https://github.com/MahApps/MahApps.Metro官网地址:http://mahapps.com/...

    WPF_MahApps.Metro界面主题使用demo

    **WPF_MahApps.Metro界面主题使用教程** 在Windows Presentation Foundation (WPF)开发中,创建美观、现代的用户界面是一项重要任务。MahApps.Metro是一个流行的开源库,它为WPF应用提供了Material Design和Metro...

    metro ui style html JS

    综上所述,"metro ui style html JS"是一个关于使用HTML、CSS和JavaScript技术来构建具有Windows 8 Metro风格的现代、响应式网页和用户界面的过程。通过理解并应用这些技术,开发者能够创建出美观且功能强大的Web...

    .net Metro风格留言板源码

    在这个项目中,开发者使用WPF来构建Metro风格的界面,包括布局管理、控件使用、样式和模板定制等。 3. **XAML(Extensible Application Markup Language)**:XAML是WPF界面设计的主要语言,它允许以声明式方式定义...

    metroStyle.css

    用于树形组件的样式设置,组织机构的样式设置!

    metro style icons

    2. **色彩鲜明**:metro style icons通常使用鲜艳的颜色,每个颜色都有特定的意义,帮助用户快速识别不同的功能。 3. **几何形状**:基于简单的几何形状,如矩形、圆形、三角形等,使得图标易于理解和记忆。 4. **...

    win8 Metro编程控件示例程序

    本示例程序集是针对Windows 8 Metro应用开发的一个教程资源,通过一系列的Demo,帮助开发者深入理解和掌握各种控件的使用。 首先,我们来看"Demo 1",这个示例通常会涵盖基本的UI元素,如按钮(Button)、文本框...

    windows8 metro style

    - **Win8 Alarms Clock**:这款闹钟应用不仅功能强大,其设计也完全符合Metro风格的要求,提供了美观且易于使用的界面,使设置闹钟成为一种享受。 总之,“Windows 8 Metro风格”不仅是一次设计语言的革新,更是...

    WPF Metro风格控件库

    **WPF Metro风格控件库** 是一个专为Windows Presentation Foundation (WPF) 应用程序设计的组件库,它提供了符合Windows 8 (WIN8) Metro风格的用户界面元素。这个控件库旨在帮助开发者创建具有现代感、简洁且响应...

    .net版本非常好看的Metro风格留言板源码,附完整数据库与源码

    此源码是基于.NET技术实现的,特别是采用了一种被称为“Metro风格”的设计美学,这源自Windows 8操作系统,以其简洁、现代和触摸友好的界面而闻名。 在.NET框架下,开发者可以使用C#、VB.NET或F#等语言编写代码。此...

Global site tag (gtag.js) - Google Analytics