如何在Windows Phone/C#中处理像素

3

Windows Phone 8使用缩放因子值来缩放元素,使所有像素都是虚拟的800x480,并且像ActualWidth/ActualHeight这样的值返回“假”的800x400值。

我正在显示一个动态构建的WritableBitmap在我的UI背景上,并希望它由所有可用的像素构成而不是缩放的800x480图像。如何“禁用”缩放并将虚拟像素映射为真实设备像素?

我知道如何从缩放因子计算出该值,但我希望它能正确地与图像背景一起使用,并理想情况下完全禁用该功能,因为它在我们特定的用例中是不必要的。


你想要创建一张图片吗?如果是的话,请查看这篇博客。你想让你的应用程序不进行缩放吗?如果是的话,请查看这篇博客 - Shawn Kendrot
谢谢。我希望WriteableBitmap上的一个像素能够匹配屏幕上的一个像素。我看了两篇文章,但都没看到怎么做。第二篇文章提到了原始像素,但我无法从文章中弄清楚我们实际上如何使用它们。 - Shai Almog
啊啊啊!如果您正在创建WriteableBitmap并希望其适合设备,请使用SaveJpeg选项保存到所需大小,然后可以重复使用。如果您不想保存图像,只需按原样使用WritebaleBitmap即可。 - Shawn Kendrot
我不感兴趣保存或存储它,我正在动态地展示它,并在应用程序的后台不断更新它。 - Shai Almog
然后只需使用XAML元素创建位图并在应用程序中使用它,无需缩放。 - Shawn Kendrot
显示剩余2条评论
1个回答

1
似乎没有办法“真正”做到这一点。我最终的解决方法是伪造它,如果有更好的答案,我很乐意接受。
我使用了ScaleFactor的值:
scaleFactor = ((double)Application.Current.Host.Content.ScaleFactor) / 100.0;

然后我这样创建了可写位图:
screen = new WriteableBitmap((int)(cl.ActualWidth * scaleFactor), (int)(cl.ActualHeight * scaleFactor));

并将其放置在背景中:
backgroundImage.Stretch = Stretch.Fill;

看起来实际上这是正确使用图像,将图像的像素映射到屏幕上而不是缩放它们。这有点 hackish,如果有更好的解决方案,我很乐意听取建议。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接