我正在尝试使用已保存到硬盘驱动器的文件填充矩形。我知道我必须使用ImageBrush,如果图像是包含的资源,我想我知道如何做到这一点。在这种情况下,文件是在硬盘驱动器上创建和设置的,但是当我尝试使用下面的代码时,矩形会发生变化,但它会改变以显示表单的背面颜色,而不是像我预期的那样显示图像(几乎就像图像是无形)。
using (dynamic CommonDialog = AutomationFactory.CreateObject("WIA.CommonDialog"))
{
dynamic imageFile = CommonDialog.ShowAcquireImage();
if (imageFile != null)
{
string filePath = string.Format("d:\\{0}.jpg", Guid.NewGuid());
imageFile.SaveFile(filePath);
rectangle2.Fill = new ImageBrush()
{
ImageSource = new BitmapImage(new Uri(filePath, UriKind.Absolute))
};
}
}
更新:我可以通过使用以下内容替换If Then中的代码块来实现此目的:
{
string filePath = string.Format("d:\\{0}.jpg", Guid.NewGuid());
imageFile.SaveFile(filePath);
BitmapImage bitmapBase = new BitmapImage();
dynamic fileData = imageFile.FileData;
byte[] imageData = fileData.BinaryData;
MemoryStream ms = new MemoryStream(imageData);
bitmapBase.SetSource(ms);
WriteableBitmap writableBitmap = new WriteableBitmap(bitmapBase);
rectangle2.Fill = new ImageBrush() { ImageSource = (writableBitmap) };
}
答案 0 :(得分:1)
您无法从本地驱动器访问图像或任何文件(独立存储或文件打开对话框中的流除外)。这些都是安全措施。
由于你没有提到Out Of Browser我认为这只是一个网络/客户端应用程序。
答案 1 :(得分:1)
使用Silverlight 4时,您可以创建一个可以访问(部分)本地磁盘的浏览器外应用程序。