我正在开发一个需要我显示大量图像的C#Universal Project(Windows桌面+ Windows Phone)。我正在尝试使用我已经给出的“压缩”图像。
这是图片:http://gyazo.com/b592a5fb6b4754c0aecc0223be56a3cf
图像由子图像组成,这些子图像全部放入1个图像中以节省空间。在过去,我编写了C#Desktop应用程序,并使用以下代码从包含子图像的图像中提取图像。
public Bitmap Load(int x, int y, int w, int h, string sprite)
{
Bitmap original = new Bitmap(@"Images\" + sprite);
Rectangle rectangle = new Rectangle(x, y, w, h);
return (Bitmap)original.Clone(rectangle, original.PixelFormat);
}
现在我正在使用通用应用程序(桌面+电话),上述代码不再有效。我被迫使用BitmapImages而不是Bitmap。
我试图转换它:
public BitmapImage Load(double x, double y, double w, double h, string sprite)
{
BitmapImage original = new BitmapImage();
original.UriSource = new Uri(@"Images\" + sprite);
Rectangle rectangle = new Rectangle();
rectangle.Width = w;
rectangle.Height = h;
rectangle.RadiusX = x;
rectangle.RadiusY = y;
return (BitmapImage)original.clone(rectangle, original.PixelFormat);
}
但BitmapImages不存在.clone和.PixelFormat函数。 任何有关将此代码转换为在C#Universal App中工作的帮助都将非常感谢!
答案 0 :(得分:2)
您无法从BitmapImage中提取像素。您需要使用WriteableBitmap或BitmapDecoder来访问实际像素。
使用BitmapDecoder,您可以使用GetPixelDataAsync调用BitmapTransform只读取您要从位图中裁剪的边界来读取图像的特定部分。
使用WriteableBitmap或BitmapEncoder,您可以读取完整的位图,然后在事实之后提取子图像。没有内置任何内容来复制子图像,但是查找和复制矩形的数学并不困难并且存在第三方扩展(例如WriteableBitmapEx' s作物延伸方法)可以为你做。