首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >加载映像和调整映像大小的最快方法是什么?

加载映像和调整映像大小的最快方法是什么?
EN

Stack Overflow用户
提问于 2009-05-07 08:19:24
回答 6查看 4.2K关注 0票数 5

我需要显示给定目录中图像的缩略图。在将图像加载到图像组件之前,我使用TFileStream读取图像文件。然后将位图调整为缩略图大小,并将其分配给TScrollBox上的TImage组件。

它似乎工作正常,但在较大的图像下会变慢很多。

有没有更快的方法从磁盘加载(图像)文件并调整它们的大小?

谢谢,皮特

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-05-07 08:30:48

不怎么有意思。你可以做的是在后台线程中调整它们的大小,并使用“占位符”图像,直到完成大小调整。然后,我会将这些调整大小的图像保存到某种缓存文件中,以便稍后处理(windows会执行此操作,并调用当前目录中的缓存thumbs.db )。

关于线程架构本身,您有几个选择。一个处理所有图像的线程,或者一个线程池,其中一个线程只知道如何处理单个图像。AsyncCalls库甚至是另一种方式,它可以使事情变得相当简单。

票数 5
EN

Stack Overflow用户

发布于 2009-05-07 09:03:20

我将补充skamradt的答案,尝试将其设计为尽可能快。为此,您应该

  • optimize I/O
  • 使用多个线程来利用多个CPU核心,并在您读取(或写入)文件时保持单个CPU核心的工作状态

多线程的使用意味着使用VCL类来调整大小是行不通的,因为VCL不是线程安全的,而且所有围绕它的hack都不能很好地扩展。efg's Computer Lab提供了图像处理代码的链接。

在使用多线程时,不要导致多个并发I/O操作,这一点很重要。如果你选择将缩略图写回文件,那么一旦你开始读取文件,你就应该完整地阅读它,一旦你开始写入文件,你也应该完整地写入它。交错这两个操作将杀死您的I/O,因为您可能会导致硬盘磁头的大量寻道操作。

为了获得最佳结果,文件的读取(和写入)也不应该发生在应用程序的主(GUI)线程中。这将建议使用以下设计:

  • 让一个线程将文件读取到TGraphic对象中,并将这些文件放入线程安全列表中。
  • 有一个线程池,等待原始大小的文件列表,并让一个线程处理一个TGraphic对象,将其调整为另一个TGraphic对象,然后将其添加到另一个线程安全列表中。对于添加到列表中的每个缩略图图像,
  • 都会通知GUI线程,因此可以将缩略图写入文件,也可以在读取线程中执行此操作(有关explanation).

,请参见上面的

编辑:

在重新阅读你的问题时,我注意到你可能只需要调整一个图像的大小,在这种情况下,一个背景线程当然就足够了。不管怎样,我会把我的答案留在原处,也许以后它会对其他人有用。这是我从我最近的一个项目中学到的,最终的程序可能需要更多的速度,但在高峰期只使用了大约75%的四核机器。将I/O从处理中解耦本可以使情况有所不同。

票数 5
EN

Stack Overflow用户

发布于 2009-05-07 09:32:30

我经常在Scale:=jsEighth中使用TJPEGImage (在Delphi7中)。这真的很快,因为JPEG解压缩可以跳过许多数据,以填充仅为宽度和高度的八分之一的位图。

另一种选择是使用shell's method to extract a thumbnail,这也是相当快的

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/835665

复制
相关文章
OpenShift的容器映像(第3部分):使你的映像可用
这是我在2017年欧洲、中东和非洲(EMEA)红帽技术交流会议上的一个会议记录,该会议集合了EMEA所有红帽解决方案架构师和顾问。它主要讨论在创建运行于OpenShift上的映像时需要考虑的事项和好的实践(案例)。第三部分重点介绍如何让应用程序开发者或发布管理员更容易地使用映像。
marsggbo
2018/01/10
1.1K0
内存映像文件导出
在测试IO密集型应用程序的时候,当出现内存泄露的时候,往往需要针对这部分进行分析内存泄露的具体原因。常规的一种方式是我们使用JVM的监控工具来监控这部分,来查看堆内存以及非堆内存的实际使用率和过程中应用程序本身的CPU使用率。但是被测试的服务一旦出现内存泄露,该服务就会疯狂的打印内存泄露的日志信息同时客户端请求服务,服务一直处于超时的情况。那么这个时候如JVisualVM的监控也会失去连接,并不能够看到很关键的信息。所以下面详细的阐述下当被测试的服务一旦出现内存泄露的时候,使用自动导出以及命令行导出的方式来获取到内存映像的文件,从而对分析内存泄露提供有利的信息。
无涯WuYa
2022/12/03
1.2K0
内存映像文件导出
计算几何之【映像】
求映像就要先求出p在线段上的投影点pp,然后把p投影点pp的向量放大两倍并与p点坐标相加,那么就求出了点x
灯珑LoGin
2022/10/31
5730
Docker 映像不安全
Ubuntu:14.04: The image you are pulling has been verified
星哥玩云
2022/07/03
5050
Linux下c程序的内存映像
今天开始分享C语言里面的存储类型、作用域、生命周期、链接属性等知识点,我们写完一个程序,不只说知其,更要知其所以然。
用户6280468
2022/03/21
3.1K0
Linux下c程序的内存映像
使用sigstore对容器映像进行签名和验证
在本文中,我将cosign项目中的部分以及如何使用它来签名和验证容器映像(以及其他受支持的对象)。的理念 cosign是使签名和验证过程成为 开发人员不可变的基础设施 。
KINGLIFE
2022/01/26
2.2K0
操作系统|程序映像|内存分配
可执行程序看起来好像占据了一个连续的内存块,称为“程序映像”。程序映像有几个不同的分区。程序文本或者代码显示在低位内存中。已初始化和未初始化的静态变量在映像中有自己的分区。其他分区堆,堆栈和环境。
heidsoft
2022/03/14
7870
操作系统|程序映像|内存分配
如何安装 CISCO GNS3 IOS 映像?
在使用GNS3之前,必须将所需的路由器或交换机 GNS3 IOS 映像安装到GNS3,但是许多想要使用 GNS3 进行学习的网络工程师在这第一步中失败了,因此,我们创建了一个指南,将向您展示如何安装 Cisco GNS3 IOS 映像。
网络技术联盟站
2023/03/13
2.6K0
如何安装 CISCO GNS3 IOS 映像?
驱动开发:内核监视LoadImage映像回调
在笔者上一篇文章《驱动开发:内核注册并监控对象回调》介绍了如何运用ObRegisterCallbacks注册进程与线程回调,并通过该回调实现了拦截指定进行运行的效果,本章LyShark将带大家继续探索一个新的回调注册函数,PsSetLoadImageNotifyRoutine常用于注册LoadImage映像监视,当有模块被系统加载时则可以第一时间获取到加载模块信息,需要注意的是该回调函数内无法进行拦截,如需要拦截则需写入返回指令这部分内容将在下一章进行讲解,本章将主要实现对模块的监视功能。
王瑞MVP
2022/11/14
4900
驱动开发:内核监视LoadImage映像回调
jvm-jmap(内存映像工具)的使用
jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。
逍遥壮士
2021/11/02
1.6K0
jvm-jmap(内存映像工具)的使用
驱动开发:内核枚举LoadImage映像回调
在笔者之前的文章《驱动开发:内核特征码搜索函数封装》中我们封装实现了特征码定位功能,本章将继续使用该功能,本次我们需要枚举内核LoadImage映像回调,在Win64环境下我们可以设置一个LoadImage映像加载通告回调,当有新驱动或者DLL被加载时,回调函数就会被调用从而执行我们自己的回调例程,映像回调也存储在数组里,枚举时从数组中读取值之后,需要进行位运算解密得到地址。
王瑞MVP
2022/11/18
7410
驱动开发:内核枚举LoadImage映像回调
从Source-to-Image开始构建容器映像【Containers】
Source-to-Image是一个很好的工具,是以快速,灵活,可再生的方式构建容器图像的应用。Source-to-Image通常缩写为S2I,它采用一个基本的“builder”映像,其中包含编译应用程序或安装依赖项(如Python的PIP或Ruby的Bundler)所需的所有库和构建工具,以及一组位于预定义位置的脚本,这些脚本用于构建、测试和运行应用程序。一旦构建器映像被创建,S2I就可以从存储库中获取代码,将其注入构建映像,编译或安装依赖项,并生成一个应用程序映像,使最终应用程序准备就绪。
yjg
2019/11/21
9850
将实体光盘制作成光盘映像iso文件
春节假期整理历史物件时发现一些书籍的光盘,虽然买了多年但一直没有看过,因为自己在用的电脑都没有光驱。正好老爸的电脑是带光驱的,想着趁过节把这些光盘的内容读取出来存在NAS上方便后续使用。 使用UltraISO软件直接“制作光盘映像文件”就可以将光盘的内容制作成iso文件,便于保存在磁盘等介质上。基本最长的也就是10分钟左右搞定。
Alfred Zhao
2023/02/10
2.1K0
权限持久化—映像劫持检测(Shift后门)[通俗易懂]
在这个路径下,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options,创建或者修改sethc.exe 如下图所示,那么可以在不登陆的情况下,点击5次shift时调出cmd
全栈程序员站长
2022/09/30
6470
权限持久化—映像劫持检测(Shift后门)[通俗易懂]
在提取 Docker 映像时解决“未找到清单”错误
如果您尝试拉取 Docker 映像并且它显示未找到清单错误,那么您需要了解如何解决它。
网络技术联盟站
2022/03/21
1.5K0
在提取 Docker 映像时解决“未找到清单”错误
打造不一样的Shfit映像劫持后门
0x00 大家一定都知道映像劫持后门,修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options下sethc.exe,添加一个Debugger字符值(REG_SZ),并且赋值为cmd.exe的执行路径为C:\windows\system32\cmd.exe,如图:
安全小王子
2020/07/31
6470
打造不一样的Shfit映像劫持后门
深入iOS系统底层之映像文件操作API介绍
iOS系统生成的可执行程序或者动态库文件的存储布局格式被称之为mach-o格式。文件中存放着程序的代码和数据,而程序运行时系统会为其建立一个进程,以及分配虚拟内存空间。同时会把程序文件中的内容加载到虚拟内存地址空间中去,这种加载的方法一般采用内存映射文件的技术来实现。所谓的映像可以理解为将一个程序文件的内容加载到进程虚拟内存中的内容,也就是说进程的映像就是程序磁盘文件在内存中的一个副本。 一般来说一个进程中映像的内容和内存布局结构会和程序文件的内容以及存储布局结构一致,映像的首地址是一个struct mach_header的结构体指针。映像中内容的排列布局和程序文件都是以段(Segment)为单位进行排列的。但是有一些情况映像的内存布局和内容可能会和程序文件的内存布局和内容不一致:
欧阳大哥2013
2019/03/06
1.6K0
深入iOS系统底层之映像文件操作API介绍
C/C++ 使用CRC检测内存映像完整性
前面的那一篇文章中所使用的技术只能有效抵抗解密者直接修改硬盘文件,当我们使用动态补丁的时候,那么内存中同样不存在校验效果,也就无法抵御对方动态修改机器码了,为了防止解密者直接对内存打补丁,我们需要在硬盘校验的基础上,增加内存校验,防止动态补丁的运用。
王瑞MVP
2022/12/28
7750
C/C++ 使用CRC检测内存映像完整性
Dism++,也许是最强的实用工具,包括映像文件。
1、点击[下载Dism++] 2、点击[下载] 3、点击[打开] 4、点击[Dism++x64.exe] 5、点击[接受] 6、点击[工具箱] 7、点击[Imagex]
裴来凡
2022/05/28
1.8K0
Dism++,也许是最强的实用工具,包括映像文件。
点击加载更多

相似问题

PHP映像调整大小

21

TinyMCE + not映像+自动调整大小不调整大小

11

调整Azure VM映像的大小

10

下载的映像被调整大小

34

使用PHP和cURL调整远程映像的大小

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档