使用LeadTools将Bitmap转为RasterImage时遇“Page not found”错误求助
解决RasterImage加载时“Page not found”错误的方法
问题原因分析
出现“Page not found”错误大概率是因为保存的BMP文件实际不存在或加载路径有误——比如Environment.SpecialFolder.MyDocuments路径获取异常、保存时权限不足导致文件未成功写入,或者路径中存在不可见字符(你的代码里MyDocuments看起来带有隐藏字符)。另外,先存磁盘再加载的方式不仅低效,还容易引入IO相关问题。
解决方案
1. 先排查路径与文件状态
在screenshot.Save(path)之后,添加代码验证文件是否成功保存:
if (!File.Exists(path)) { throw new FileNotFoundException("截图文件未成功保存", path); }
同时输出路径值确认正确性:
Console.WriteLine($"实际保存路径:{path}");
如果路径里有奇怪的隐藏字符,手动修正Environment.SpecialFolder.MyDocuments的拼写,确保没有额外不可见字符。
2. 更优方案:内存中直接转换(无需存磁盘)
跳过磁盘写入步骤,直接通过MemoryStream完成Bitmap到RasterImage的转换,彻底规避路径和IO问题:
public static RasterImage TakeScreenShot() { using (Bitmap screenshot = new Bitmap(1920, 1080)) { using (Graphics g = Graphics.FromImage(screenshot)) { g.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(1920, 1080)); // 用内存流直接转换,无需写入磁盘 using (MemoryStream ms = new MemoryStream()) { screenshot.Save(ms, ImageFormat.Bmp); ms.Position = 0; // 重置流指针到起始位置 using (RasterCodecs codecs = new RasterCodecs()) { return codecs.Load(ms, 0, CodecsLoadByteOrder.BgrOrGray, 0, 0); } } } } }
3. 额外注意事项
- 确保使用的Leadtools版本支持从MemoryStream加载RasterImage(主流新版本均支持)。
- 如果必须使用磁盘文件,检查目标文件夹的写入权限,确认当前程序有权限写入
MyDocuments目录。
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

