C# 如何使用cefsharp的嵌入式资源中的图像?
我正在努力弄清楚如何使用自定义scheme处理程序和cefsharp从嵌入式资源加载图像。我目前正在使用它加载html、css和js文件,没有任何问题,但是当尝试加载图像时,我总是会得到损坏的图像指示器。(开发工具也无法显示响应)我发现ResourceHandler的cefsharp.example中的默认示例无法正确处理超过32KB的任何内容,因此我做了一个小小的更改,使其不会剪辑超过32KB的文件,但无论哪种方式,对于我尝试用作嵌入式资源的任何图像,我仍然会得到损坏的图像 以下是IResourceHandler所需的ProcessRequest方法C# 如何使用cefsharp的嵌入式资源中的图像?,c#,cefsharp,C#,Cefsharp,我正在努力弄清楚如何使用自定义scheme处理程序和cefsharp从嵌入式资源加载图像。我目前正在使用它加载html、css和js文件,没有任何问题,但是当尝试加载图像时,我总是会得到损坏的图像指示器。(开发工具也无法显示响应)我发现ResourceHandler的cefsharp.example中的默认示例无法正确处理超过32KB的任何内容,因此我做了一个小小的更改,使其不会剪辑超过32KB的文件,但无论哪种方式,对于我尝试用作嵌入式资源的任何图像,我仍然会得到损坏的图像 以下是IResou
public bool ProcessRequest(IRequest request, ICallback callback)
{
// The 'host' portion is entirely ignored by this scheme handler.
//Replace internal with our assembly namespacing:
var url = request.Url.Replace("internal://", "MyAssembly.Html.").TrimEnd('/');
fileName = url.Replace('/', '.');
byte[] bytes = null;
var assembly = Assembly.GetExecutingAssembly();
using (Stream embeddedFileStream = assembly.GetManifestResourceStream(fileName))
{
if (embeddedFileStream != null)
{
using (StreamReader reader = new StreamReader(embeddedFileStream))
{
bytes = Encoding.UTF8.GetBytes(reader.ReadToEnd());
}
}
}
if (bytes == null)
{
callback.Dispose();
}
else
{
Task.Run(() =>
{
using (callback)
{
stream = new MemoryStream(bytes);
var fileExtension = Path.GetExtension(fileName);
mimeType = ResourceHandler.GetMimeType(fileExtension);
callback.Continue();
}
});
return true;
}
return false;
}
如前所述,这适用于html、js、css文件,但不适用于任何类型的图像。在这一点上,我不知道遗漏了什么。非常感谢您的帮助。确保您的mimetype正确无误,否则将无法加载。数据缓冲在32kb的块中,示例中至少有三个文件更大并正确加载mimetype是正确的,对于我的jpg,返回为image/jpeg。我在ReadResponse中设置了一个断点,它从未对每个文件调用过一次以上的方法(甚至在开发工具中看到了剪裁过的css文件)。我在示例项目中添加了几百KB的图像,它加载得很好。请确保您使用的是最新版本55.0.0。您是在扩展RequestHandler,还是在实现接口(如CefSchemeHandler),都不要使用静态ResourceHandler方法之一