立即将图像加载到内存中

2023-12-04

我需要将 WPF 中的 Tiff 图像中的所有帧打开到内存中,然后删除源。之后我最终需要渲染该图像(根据窗口大小调整大小)。我的解决方案非常慢,我无法在第一次请求之前删除文件源。有什么最佳实践吗?


Use CacheOption = BitmapCacheOption.OnLoad

该选项可以与BitmapImage.CacheOption属性或作为参数BitmapDecoder.Create()如果您想在加载图像后访问多个帧,则必须使用BitmapDecoder.Create。在任何一种情况下,文件都将被完全加载并关闭。

另请参阅我的回答这个问题

Update

以下代码非常适合加载图像的所有帧并删除文件:

var decoder = BitmapDecoder.Create(new Uri(imageFileName), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
List<BitmapFrame> images = decoder.Frames.ToList();
File.Delete(imageFileName);

当然,您也可以在删除文件后访问decoder.Frames。

如果您喜欢自己打开流,则此变体也适用:

List<BitmapFrame> images;
using(var stream = File.OpenRead(imageFileName))
{
  var decoder = BitmapDecoder.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
  images = decoder.Frames.ToList();
}
File.Delete(imageFileName);

无论哪种情况,它都比创建一个更有效MemoryStream因为一个MemoryStream同时在内存中保留数据的两个副本:已解码的副本和未解码的副本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

立即将图像加载到内存中 的相关文章

  • 当 DataTable 为空时,DataGrid 显示空行

    我有一个DataGrid dg1 绑定到DataTable 数据集 表 代码运行良好并且DataGrid正在显示数据DataTable正确 但是 如果我Clear the DataTable the DataGrid也很清楚 但留下一个空行
  • MemoryStream“内存不足”C#

    我有一个自定义数据对象 虚拟文件 的实现see here https stackoverflow com questions 4024657 how to drop a file from windows formlistview to d
  • 用eclipse测试java程序的内存消耗[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • WPF DataGrid 排序后滚动到顶部

    我有一个使用数据网格的 Net 4 0 WPF 应用程序 目前 按列排序后 网格的滚动位置保持在排序前的位置 对于此应用程序 我需要在任何排序后滚动到网格顶部 我尝试过像这样处理排序事件 Private Sub myDataGrid Sor
  • ListView:在资源字典中定义ItemsPanelTemplate

    我有一个 ListView 其布局看起来像 Windows 资源管理器视图 图标 一些详细信息 绑定到 ViewModel 中某处的列表 我的目标是能够随时在资源管理器视图或经典视图之间切换 我可以定义一个ItemsPanelTemplat
  • WPF 3D - 在复杂几何体上映射渐变画笔

    我想问是否有人知道如何在 WPF 3D 中的复杂对象上映射渐变画笔 结果应该类似于 matlab 中的 3D 图像 例如 3D 函数 假设您有一些想要可视化的 3 维数据 并且想要通过颜色区分某些级别的值 给定一个 GradientBrus
  • 获取程序集中所有资源的列表

    我有一个文件夹Resources并想要获得一份包含所有内容的列表paths 如果我将它们设置为embedded resource 我可以通过 var resources Assembly GetExecutingAssembly GetMa
  • 将快速文本输入发送到另一个进程(窗口)

    我正在编写一个 C WPF 程序 它将文本消息发送到另一个程序的窗口 我有一个宏程序作为我的键盘驱动程序 Logitech g15 的一部分 它已经做到了这一点 尽管它不会将击键直接发送到进程 而是发送到当前聚焦的窗口 它运行良好 但我也需
  • 带有移动向前/向后按钮的自定义列表框

    我有一个带有左 右重复按钮的自定义列表框 可以使用内容模板滚动其内容 如下所示
  • WPF Treeview,如何更改缩进

    我的树视图基本上有 文件夹 节点 以及不包含其他项目的项目下面的一层 因此 不需要用于展开 折叠图标的空间 在第 2 层 我可以放弃这个图标空间从而减少缩进吗 项目 在示例 机场 中 应向左移动一些像素 重要提示 基本上是寻找代码解决方案
  • 数据绑定到代码隐藏中的目标 CLR 属性

    在代码隐藏中绑定到依赖属性很容易 你只需创建一个新的System Windows Data Binding对象 然后调用目标依赖对象的SetBinding method 但是 当我们绑定的属性是 CLR 属性并且您无法提供Dependenc
  • GridSplitter 从右侧调整大小 - 奇怪的行为

    使用 Kaxaml 从左侧调整大小可以按预期工作
  • 将 Combobox 控件绑定到 DataGrid 中的单独源

    我尝试在 DataGrid 中使用 ComboBox 这将允许用户选择来自不同表的值 我使用 ViewModel 类作为 DataContext 其中包含一个用于终端的 ObservableCollection 和另一个用于 Termina
  • 从 BitmapImage 获取支持的图像格式

    如何获取 System Windows Media Imaging BitmapImage 支持的图像格式列表 我正在用 C WPF 编写一个简单的图像处理工具 BitmapImage 类是更有用的位图类之一 因为它能够从多种格式进行解码
  • 检测 iframe 内容加载失败

    我可以使用以下命令检测 iframe 的内容何时加载load事件 不幸的是 就我的目的而言 这有两个问题 如果加载页面时出现错误 404 500 等 则永远不会触发加载事件 如果某些图像或其他依赖项加载失败 则会照常触发加载事件 有什么方法
  • GridViewColumn 中的 WPF 文本格式设置

    我想将格式 对齐文本 货币格式 0000 00 应用于 GridViewColumn 中的列
  • 使用 WPF 动态加载内容

    好的 我有一个容器 我为其创建了两个数据模板 基本上 一个模板将显示 5 个文本框 其中包含绑定到它们的对象数据 另一个模板将显示一个用于添加该特定对象的按钮 我对 DataTemplateSelector 进行了子类化 它可以工作 但是当
  • iOS 内存警告

    我正在尝试使用从 Parse 数据库下载的图像填充集合视图 但我收到内存警告 然后偶尔崩溃 有谁知道其他应用程序如何设法呈现这么多图像而不崩溃 有人可以告诉我如何优化我已有的东西吗 这是所有相关代码 https gist github co
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时

随机推荐

  • 验证 Assertj 中是否已调用断言

    我正在阅读使用 Assertj 来验证结果的测试类 有时 我会发现一个没有断言的assertThat assertThat object getField 是否有可能在开发周期的某个地方识别这些类 我的第一个猜测是使用自定义声纳规则 尽管我
  • 无法使用 Mac x86 程序集将 .data 中的变量移动到寄存器

    我用 AT T 语法编写了一小段程序集 目前已在 data部分 但是 当我尝试将这些变量中的任何一个移动到寄存器时 例如 eax 一个错误来自gcc被提出 代码和错误信息如下 data x int 14 y int 4 str string
  • Java静态序列化规则?

    我正在使用一些静态方法和字段进行保存状态序列化 我可以发誓尽管序列化和静态造成了混乱 我应该让所有静态都是瞬态的吗 增加通话量会恢复正常吗 statics 是隐含的transient 所以你不需要这样声明它们 序列化是为了序列化实例 not
  • x86_64 程序集 - 尝试在 x64 程序集中编辑数组内的字节时出现段错误

    我遵循的教程适用于 x86 是使用 32 位汇编编写的 我尝试在学习 x64 汇编的过程中遵循该教程 直到本课为止 一切都进展顺利 我有以下简单的程序 它只是尝试修改字符串中的单个字符 它编译得很好 但运行时出现段错误 section te
  • 使用 firebase 进行 JUnit 类测试

    我试图JUnit测试这个类 public class WeekListActivity extends AppCompatActivity implements AdapterView OnItemClickListener private
  • 如何解决此错误“webelement 不支持索引”[webdriver][python]

    我正在进行 xpath 搜索 page driver find element by xpath td class mceIframeContainer mceFirst mceLast 1 这给了我在 firebug 中所需的第一类项目
  • Google Map API V3:MarkerClusterer 不会分解为标记

    我有一个应用程序 我使用 Google Map API 来显示用户使用其纬度 经度发布的帖子的标记 我使用了 MarkerClusterer 功能来更好地组织标记 该功能可以工作 但存在一些错误 本质上 我一直在家里对此进行测试 因此所有测
  • 我对 Sails.js 水线一对一关联逻辑感到困惑

    所以我感到困惑的原因是因为我是一名 PHP 开发人员并且经常使用 Laravel 和 FuelPHP 我真正不明白的是协会本身 我的意思是 我想创建一个基本的 hasOne BelongsTo 逻辑 其中包含以下内容 用户只有一份个人资料
  • 在 Scala 中计算最多 5 的中位数

    因此 在回答其他一些问题时 我偶然发现计算 5 的中位数的必要性 现在 有一个类似的问题用另一种语言 但我想要一个 Scala 算法 但我不确定我对我的算法是否满意 这是一个不可变的 Scala 版本 它具有最少的比较次数 6 并且看起来不
  • 由于 reticulate_python 导致闪亮应用程序部署出现问题

    我有一个应用程序想要部署在shinyapps io 上 我认为值得注意的是 应用程序中的数据是从 athena 的数据库中提取的 我用了这个包Rathena连接到数据库以及所有用于从我的计算机本地运行良好的内容 但是 我尝试将其部署到shi
  • 如何正确隐藏这些广告横幅?

    Sprite Kit 游戏 我希望在游戏过程中隐藏我的广告横幅 我已经将我的项目设置为包含 iAd 和 AdMob 广告横幅 在添加 AdMob SDK 和 AdMob 广告代码之前 当我想要隐藏 iAd 横幅时 隐藏它没有任何问题 现在由
  • 具有导出选项(如数据表)的等效单个 Html 文件

    我使用 DataTables 使用静态数据创建了一个 HTML 表 带有导出选项 搜索 分页 plnkr co edit n3cbx8GrGoJtOpgbxE32 p preview 类似的示例或工作 html 可在 angular ui
  • 登录对话框 PyQt

    当客户询问我是否可以在应用程序启动时实现某种登录表单时 我几乎完成了我的应用程序 到目前为止 我已经设计了用户界面 并修改了实际的执行 用户名和密码目前无关紧要 class Login QtGui QDialog def init self
  • 我无法使用 ctypes 访问 C++ 类属性

    我正在使用 ctypes 为 C 库开发一种 Python API 到目前为止 一切都很顺利 但是 我将操作系统从 Ubuntu 20 4 LTS 升级到 22 04 现在使用 Python3 10 6 和 g 11 3 0 但即使使用 g
  • 将基于Box的树结构适配为Rc+RefCell时如何处理“临时值丢失”错误?

    我创建了一个树 其类型定义类似于 derive Debug Clone pub crate struct TreeBox
  • 配置 gvim 设置颜色和字体

    我想尝试一下 vim 但是配置文件有点问题 我这里已经安装了gvimC Program Files x86 Vim vim73并添加了一个名为C Program Files x86 Vim vim73 vimrc 但是当我尝试不同的配置时
  • 通过 FTP 将文件发送到服务器,但结果到达时字节大小为零

    我正在尝试使用 FTPClient 将文件上传到数据库服务器 显示文件传输成功 但文件为空 大小为0字节 下面是我用来构建的源代码 有人能解决这个问题吗 package Examples import org apache commons
  • 如何在 JOIN 的 WHERE 子句中使用列名作为 LIKE 语句的一部分

    LEFT OUTER JOIN INVENTTRANS ON TEMP VOUCHERPHYSICAL INVENTTRANS VOUCHERPHYSICAL WHERE INVENTTRANS ITEMID Temp INVENTDIMI
  • Logstash 文件输入:sincedb_path

    重新启动 Logstash 后 有时会观察到 Logstash 会重复日志事件 想知道什么是正确的申请方式start position sincedb path sincedb write interval配置选项 当同一位置有多个文件时会
  • 立即将图像加载到内存中

    我需要将 WPF 中的 Tiff 图像中的所有帧打开到内存中 然后删除源 之后我最终需要渲染该图像 根据窗口大小调整大小 我的解决方案非常慢 我无法在第一次请求之前删除文件源 有什么最佳实践吗 Use CacheOption BitmapC