Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用cefsharp的嵌入式资源中的图像?_C#_Cefsharp - Fatal编程技术网

C# 如何使用cefsharp的嵌入式资源中的图像?

C# 如何使用cefsharp的嵌入式资源中的图像?,c#,cefsharp,C#,Cefsharp,我正在努力弄清楚如何使用自定义scheme处理程序和cefsharp从嵌入式资源加载图像。我目前正在使用它加载html、css和js文件,没有任何问题,但是当尝试加载图像时,我总是会得到损坏的图像指示器。(开发工具也无法显示响应)我发现ResourceHandler的cefsharp.example中的默认示例无法正确处理超过32KB的任何内容,因此我做了一个小小的更改,使其不会剪辑超过32KB的文件,但无论哪种方式,对于我尝试用作嵌入式资源的任何图像,我仍然会得到损坏的图像 以下是IResou

我正在努力弄清楚如何使用自定义scheme处理程序和cefsharp从嵌入式资源加载图像。我目前正在使用它加载html、css和js文件,没有任何问题,但是当尝试加载图像时,我总是会得到损坏的图像指示器。(开发工具也无法显示响应)我发现ResourceHandler的cefsharp.example中的默认示例无法正确处理超过32KB的任何内容,因此我做了一个小小的更改,使其不会剪辑超过32KB的文件,但无论哪种方式,对于我尝试用作嵌入式资源的任何图像,我仍然会得到损坏的图像

以下是IResourceHandler所需的ProcessRequest方法

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方法之一