【发布时间】:2015-12-09 12:43:37
【问题描述】:
很抱歉问了一个非常基本的问题,但这可能是多年来我第一次感到非常困惑。
Windows 提供了两组控件:Windows.UI.Xaml 命名空间(我认为这被称为 Metro),用于 Windows 应用商店应用程序和 System.Windows (WPF) 用于桌面。
由于我打算主要为 Windows 8.1 和 Windows 10 手机开发 Windows 应用商店应用程序,我将不得不坚持使用 Windows.UI.Xaml,它不仅有一组单独的 UI 元素,而且还有一组单独的 UI 元素。位图、画笔等(Windows.UI.Xaml.Media 与 System.Windows.Media)。
我发现 Windows.UI.Xaml 对图形的支持非常有限,远远低于 WPF、Android 或(甚至!)iOS 平台提供的支持。首先,我遇到了一个简单的任务:平铺背景!
由于 Windows.UI.Xaml.Media.ImageBrush 不支持平铺,我想“手动”进行。一些网站建议制作许多孩子,每个孩子都拿着一块瓷砖。老实说,这对我来说看起来是一种相当尴尬的方法,所以我决定以一种看起来更自然的方式来做:创建一个离屏平铺图像,将其分配给画笔并将画笔指定为面板的背景。
平铺代码相当简单(它可能有错误,甚至可能无法在手机上运行,因为使用了一些不可用的类)。
int panelWidth = (int) contentPanel.Width;
int panelHeight = (int) contentPanel.Height;
Bitmap bmpOffscreen = new Bitmap(panelWidth, panelHeight);
Graphics gOffscreen = Graphics.FromImage(bmpOffscreen);
string bmpPath = Path.Combine(Windows.ApplicationModel.Package.Current.InstalledLocation.Path, "Assets/just_a_tile.png");
System.Drawing.Image tile = System.Drawing.Image.FromFile(bmpPath, true);
int tileWidth = tile.Width;
int tileHeight = tile.Height;
for (int y = 0; y < panelHeight; y += tileHeight)
for (int x = 0; x < panelWidth; x += tileWidth)
gOffscreen.DrawImage(tile, x, y);
现在我大概在 bmpOffscreen 中有平铺图像。但是如何将其分配给画笔?为此,我需要将 Bitmap 转换为 BitmapSource,而我找不到类似于 System.Windows.Imaging.CreateBitmapSourceFromHBitmap 可用于 WPF 结构的东西!
【问题讨论】:
-
试试这个作为示例(使用 xaml):
-
Michael Kozak:这不是资源位图,而是以编程方式创建的位图。
标签: xaml windows-phone-8