我正在尝试在WPF应用程序中显示图像。
我为每个图像获取一个路径,然后创建一个用于显示图像的html网站。
StringBuilder sb = new StringBuilder();
sb.Append("<html><body><img width='100%' height='100%' src='");
sb.Append(path);
sb.Append("'/></body></html>");
code = sb.ToString();
return code;
我用于生成HTML的代码是否返回有效的HTML代码-我已经通过使用浏览器打开代码来验证了这一点,该浏览器以我想要的方式显示图像。
我正在从名为getHtmlForImage(imagePath)
的方法中调用此代码,然后将其加载到浏览器中:
string myHtml = getHtmlForImage(imagePath)
string fakeUrl = "http://interceptMe/"
browser.RegisterResourceHandler(fakeUrl, newMemoryStream(Encoding.UTF8.getBytes(myHtml)));
browser.Load(fakeUrl);
文件路径如下:
"C:\\ProgramData\\ApplicationFolder\\Resources\\IMG1_05.JPG"
,最终的HTML代码如下所示:
<html><body><img width='100%' height='100%' src='C:\\ProgramData\\ApplicationFolder\\Resources\\IMG1_05.JPG'/></body></html>
不显示图像。粘贴到.html并使用标准浏览器打开时,此代码有效。我已经通过向其添加文本来验证该代码已被拦截-然后可以正确显示该代码。用网络上的图像替换给getHtmlForImage()
的路径会显示所需的图像,但不会显示本地图像。将RegisterResourceHandler
更改为:
browser.RegisterResourceHandler(fakeUrl, new MemoryStream(Encoding.UTF8.GetBytes(myHtml)), ResourceHandler.GetMimeType(".jpg"));
显示先前显示的White box on black background-用于本地图像和基于Web的图像。
使用code
和myHtml
之类的多个变量的原因是调试。
以下是在新项目中重现该错误的方法:
第1步:新建一个WPF项目,导入CefSharp并像在Github Issue 1714 - variant 1中那样获得对AnyCpu的支持
第2步:添加Chromium Web浏览器,并在MainWindow.xaml中添加一个按钮,如下所示:
<wpf:ChromiumWebBrowser x:Name="browser" Address="www.google.com" Grid.Column="0"></wpf:ChromiumWebBrowser>
<Button Content="BreakTheBrowser!" Grid.Column="1" Click="Button_Click"></Button>
步骤3:使用以下代码在MainWindow.xaml.cs
中启动浏览器:
public MainWindow() {
var settings = new CefSettings();
settings.BrowserSubprocessPath = @"x86\CefSharp.BrowserSubprocess.exe";
Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null);
InitializeComponent();
}
第4步:创建一个名为getHtmlForImage(string path)
的方法,如下所示:
private String getHtmlForImage(string path) {
string code;
StringBuilder sb = new StringBuilder();
sb.Append("<html><body><img width='100%' height='100%' src='");
sb.Append(path);
sb.Append("'/></body></html>");
code = sb.ToString();
return code;
}
第5步:向按钮中添加一个button_click
事件,然后在该点击事件中加载图片:
private void Button_Click(object sender, RoutedEventArgs e) {
string path = "https://www.catster.com/wp-content/uploads/2017/11/A-Siamese-cat.jpg";
string myHtml = getHtmlForImage(path);
string fakeUrl = "http://interceptMe/";
browser.RegisterResourceHandler(fakeUrl, new MemoryStream(Encoding.UTF8.GetBytes(myHtml)), ResourceHandler.GetMimeType(".jpg"));
browser.Load(fakeUrl);
}
步骤6:启动应用程序,然后单击按钮。应该出现在黑色背景上臭名昭著的白色框。
其他信息: