将 nil 赋给 TImage.Picture.Graphic 来清除图片后,如何再次使用它?

2024-01-02

在下面的代码中,我清除了btnSaveClick中的图片,稍后在btnLoadClick中我想将图片分配给图像,但它给出了AV,因为Graphic对象不存在。

我怎样才能完成任务?

procedure TForm1.btnSaveClick(Sender: TObject);
var
  fs: TFileStream;
  s:  TMemoryStream;
  buf: TBytes;
  z:  integer;
begin
  fs := TFileStream.Create('c:\temp\a.my', fmCreate);
  s  := TMemoryStream.Create;
  try
    Image1.Picture.Graphic.SaveToStream(s);
    z := s.Size;
    SetLength(buf, z);
    s.Position := 0;
    s.ReadBuffer(buf[0], z);

    fs.WriteBuffer(z, SizeOf(integer));
    fs.WriteBuffer(buf[0], z);
  finally
    s.Free;
    fs.Free;
  end;

  ShowMessage('ok');

  Image1.Picture.Graphic := nil;
end;

procedure TForm1.btnLoadClick(Sender: TObject);
var
  fs: TFileStream;
  s:  TMemoryStream;
  buf: TBytes;
  z:  integer;
  gc: TGraphicClass;
begin
  fs := TFileStream.Create('c:\temp\a.my', fmOpenRead);
  s  := TMemoryStream.Create;
  try
    fs.ReadBuffer(z, SizeOf(integer));
    SetLength(buf, z);
    fs.ReadBuffer(buf[0], z);
    s.WriteBuffer(buf[0], z);
    s.Position := 0;

    Image1.Picture.RegisterFileFormat('jpg', 'jpeg files', gc);
  //  Image1.Picture.Graphic.LoadFromStream(s);  <-- AV here. Whats the proper way to do it?

  finally
    s.Free;
    fs.Free;
  end;

  ShowMessage('ok');

end;

如果您从扩展名与注册图像类相对应的文件加载,您可以简单地执行以下操作:

Picture.LoadFromFile(FileName);

否则,您可以创建特定的实例TGraphic后代(取决于您使用的图形类型)在代码中并将其分配给Graphic财产,例如对于 JPEG:

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

将 nil 赋给 TImage.Picture.Graphic 来清除图片后,如何再次使用它? 的相关文章

  • 使用项目中的波形文件

    我目前只能通过将波形文件放在已编译的 exe 旁边来播放背景声音 但我实际上想要一个包含波形文件的静态可执行文件 这在Delphi XE2中可能吗 这是我的代码 SndPlaySound Raw wav SND ASYNC or SND L
  • Delphi 流畅的界面

    使用上有什么优点和缺点流畅的界面 http en wikipedia org wiki Fluent interface在德尔福 流畅的界面应该会增加可读性 但我对此有点怀疑one包含很多链式方法的长 LOC 是否存在编译器问题 是否存在任
  • Delphi应用程序窗口z顺序和MainFormOnTaskBar属性

    我正在维护一个最初用 Delphi 7 编写并移植到 Delphi XE 的应用程序 使用 Windows 7 我们遇到了一些问题 例如模态窗口出现在主窗口下方 以及最终无法与程序交互 因为用户需要与模态窗体交互 而这是不可能的 因为它位于
  • 从 Delphi VCL 样式获取特定字形

    我想从 VCL 样式获取特定的位图 并将其设置为按钮上的图像 它实际上是帮助问号 在位图样式编辑器中是来自表单的 btnHelp 图像 要从 VCL 样式获取视觉元素 字形 您必须使用GetElementDetails和TCustomSty
  • 如何比较枚举类型集

    从某个时刻开始 我厌倦了编写设定条件 and or 因为对于更多的条件或更长的变量名 重新编写会变得笨拙且烦人 所以我开始写助手这样我就可以写ASet ContainsOne ceValue1 ceValue2 代替 ceValue1 in
  • 如何从该 JAVA 文件中提取 Delphi 类以与 Android 一起使用?

    我的Delphi XE7项目需要与FTDI FT311 Android 配件芯片 http www ftdichip com Products ICs FT311D html 他们帮助提供了一个 Android 演示 其中包括他们的 JAV
  • 如何在表单上绘制半透明图像?

    我想在 Delphi 窗体上绘制半透明图像 但由于某种原因它不起作用 Here is the original PNG border is semi transparent 我将图像加载到TImage object Image1 Trans
  • 在 Delphi 中淡入 alpha 混合 PNG 表单

    几年前 当 Vista 首次发布时 我曾提出过这个问题 但始终没有解决这个问题 并把它搁置起来 留待以后再考虑 我有一个启动屏幕 我花了很大力气让它看起来很棒 这是 32bpp alpha 混合的 PNG 我有一些代码 如果需要 我可以挖掘
  • 如果加载 dll 找不到依赖项,有什么方法可以捕获错误吗?

    我正在编写一个 Windows 32 位程序 可以使用多个可能的 dll 之一 所以它尝试依次加载每个 dll 使用SysUtils SafeLoadLibrary如果加载成功 它就会使用该 dll 不幸的是 其中一些 dll 静态链接到其
  • Delphi:现场记录应用程序错误

    使用 Delphi 7 我想知道是否有一个免费组件可以在我的应用程序在远程站点运行时收集诊断信息并帮助我调试错误报告 也许它会记录每个选择的菜单项 单击的控件 文本输入等 也许它只是在崩溃时转储堆栈 也许它还有其他作用 我不介意添加代码 例
  • 如何修复这个 delphi 7 编译错误 - “重复资源”

    我正在尝试编译我继承的 Delphi 7 项目 但收到此错误 错误 警告 重复资源 错误 类型 2 位图 ID 编辑 错误 文件 C 路径缩短 common CRGrid res 资源已保留 文件 c common raptree RES
  • 使用远程数据编写 Android、iPad、iPhone 客户端的技术

    我需要探索世界 你写了一个杀手级应用程序 但你有 Android iPhone iPad 客户端吗 我的问题是 1 向这些设备发送数据的最佳方式是什么 按照建议进行肥皂和休息here https stackoverflow com ques
  • Android中如何检测程序的终止?

    当 Windows 程序终止时 它会调用事件处理程序 例如 OnClose OnDestroy 和析构函数 Destroy 当我想保存一些 INI 设置时 这些地方就是我要保存的地方 我为所有这些事件编写了事件处理程序 但当我终止程序时它们
  • 如何检查文件是否有备用数据流?

    Delphi 有没有办法检查文件是否有任何备用数据流 看一下 Win32 APIFindFirstStreamW https msdn microsoft com en us library windows desktop aa364424
  • 从不同的形式调用过程

    我正在使用 Lazarus 我有一个名为TForm1单元名称为 Unit 1 在这里我有一个名为mergeDATfile a shortint 这会产生一些东西 顺便说一句 我必须创建另一个名为TForm2里面有按钮 Button1 当它被
  • 什么是代码页 0?

    我正在使用Delphi函数 StringCodePage 我在 COM 函数 Acrobat Annotation getContents 请参阅我的其他帖子 返回的字符串上调用它 它返回 0 0是什么 安西 代码页 0 是 CP ACP
  • 在 XMLDocument 中使用 DocumentElement 时发生访问冲突

    当我尝试使用时 我总是遇到访问冲突DocumentElement of the XMLDocument 我创造XMLDocument基于某些文件的存在 错误信息 项目project1 exe引发异常类EAccessViolation 消息
  • 让线程在窗体关闭时保持运行

    我在我的应用程序上创建了一个同步线程 我想知道如果我关闭申请表 是否有办法让该线程保持打开状态 直到完成同步过程 调用线程的WaitFor方法在您的 DPR 文件中 之后Application Run线 如果线程已经运行完毕 那么WaitF
  • “已发布集 '%s' 的大小大于 4 字节”。如何修复这个编译器错误?

    我有一组包含 138 个值的枚举值 就像是 type TSomething sOne sTwo sThree sOnehundredAndThirtyeight TSomethings set of TSomething TSomethin
  • 如何将 Delphi Chromium Embedded (TChromium) 组件的声音静音?

    我需要将某个声音静音TChromium组件来制作无声浏览器 主要问题是在 Windows XP 上 当我将浏览器的声音静音时 它会静音整个系统的声音 有没有办法让电脑静音TChromium成分 我已经成功使用以下代码 procedure C

随机推荐

  • 结构变量不会因赋值而改变

    struct st int a1 3 int a2 2 int a3 1 void main void x a3 1 if x a3 1 printf TRUE n else printf FALSE n x a3 1 if x a3 1
  • 如何相对于背景图像宽度定位元素

    注意 我没有 JS 访问权限 这必须通过 CSS 来完成 我的背景图像 850 x 1080 位于屏幕右下角 我对图像进行了缩放 使其占据宽度的 38 background position right bottom background
  • java.io.FileNotFoundException:类路径资源

    import org springframework beans factory BeanFactory import org springframework beans factory xml XmlBeanFactory import
  • Flutter:从 Future 获取价值的正确方法

    我有一个返回图像目录路径的函数 它执行一些额外的检查 例如目录是否存在 然后它会做出相应的行为 这是我的代码 Future
  • 我可以欺骗 HttpRequest.Current.Request.IsLocal 吗?

    我正在运行一个 Web 应用程序 如果在本地运行 它会显示一些调试行为 资源字符串周围的引号等 并且我想在我无法访问互联网的会议上在我的笔记本电脑上演示该应用程序 所以它必须是本地的 应用程序使用 HttpContext Current R
  • 复制文件而不覆盖

    我只是似乎无法在命令行上找到一种方法来表示 将目录 A 中的所有文件复制到目录 B 中 但如果该文件已存在于目录 B 中 则不要覆盖它 无论哪个文件较新 并且不要提示我 我已经经历过复制 移动 xcopy 和 robocopy 我能得到的最
  • 使用 DSC 无人值守安装 .net Framework 4.6.2

    我正在尝试以自动方式在许多服务器上安装 4 6 2 不实施 WSUS 或其他方式 我的目标是利用 PowerShell DSC 因为我们正在以这种方式配置其他方面 但是 我尝试过的资源 xWindowsUpdate 中的 xHotfix 和
  • 从 linq 在新对象中创建新属性

    所以我正在执行 linq to sql 查询 结果以 IEnumerable 形式出现 从此列表中 我为返回的每个结果创建一个新对象 我已经使用的存储过程正在按我想要的顺序返回对象 我们有一个排行榜 查询后结果按降序排列 我遇到问题的部分是
  • 如何解决“无法解析:org.webrtc:google-webrtc”?

    我构建了一个 android webrtc 应用程序 但是当将 webrtc 添加到 android studio 项目时 实现 org webrtc google webrtc 1 0 我收到此错误 无法解析 org webrtc goo
  • JSP/Glassfish 的 PHP .htaccess 模拟

    如何限制 JSP Glassfish 中的文件 PDF 访问 以便只能从源代码而不是直接的 url 打开它们 对于 PHP 项目 我使用 htaccess webapp 下的任何内容WEB INF无法通过直接 URL 访问目录 但应用程序代
  • 如何在sql Developer oracle中使用spool命令

    亲爱的 我无法使用 spool 命令 它不起作用或者我没有做正确的事情 我正在尝试将查询结果保存在 txt 文件中 也尝试使用 csv 保存 select csv from table但它也不起作用 所以我写的是 set echo off
  • 从 Hibernate 3 迁移到 4 会减慢启动速度

    我们正在尝试将我们的项目从 hibernate 3 迁移到 hibernate 4 一切工作正常 但问题是启动 我们不使用 JPA 我们直接使用 hibernate 以及 xml 文件和映射文件
  • SVG 渐变不起作用

    我有一个 svg 我需要用渐变填充它 css 是由脚本添加的 如果你使用单一 RGB 颜色 一切都可以正常工作 但使用渐变时 SVG 会产生白色背景 脚本后的结果代码
  • RibbonComboBox 选定的图库项目在鼠标离开时恢复为旧值

    我已将 WPF 功能区替换为最新的库 组合框选择更改会触发数据网格的重新加载 我的 RibbonComboBox 有问题 如果我将鼠标光标移出所选项目 则所选项目将恢复为旧项目 如果我将光标保持在所选项目上直到数据网格重新加载完成 则新值将
  • scala 中什么时候必须使用分号?

    我正在学习如何在 Scala 中编程 并被告知分号在 Scala 中是可选的 因此 考虑到这一点 我尝试使用以下没有分号的嵌套代码块 但是 它会在 Scala REPL 中引发错误 scala gt val a 1 val b a 2 va
  • 在Java中查找字符串中子字符串的第二次出现

    我们得到一个字符串 比如说 itiswhatitis 和一个子串 比如说 is 我需要找到的索引 i 当字符串 is 在原始字符串中第二次出现 String indexOf is 在这种情况下将返回 2 在这种情况下我希望输出为 10 使用
  • 在VB中替换单个字符串中的多个字符

    是否可以在 Visual Basic 中替换字符串中的多个字符 例如 mary had a little lamb 全信a必须改为z all m必须改为y all t必须改为x只需一行代码 结果是Replace是一个字符串 可以连接多个替换
  • 玩2.5,休眠:表未映射

    我在下面遇到了异常 例外是 org hibernate hql internal ast QuerySyntaxException 用户未映射 调用此代码时发生了这种情况 TypedQuery
  • 变量检查,有些不对劲

    我花了一些时间在互联网上搜索此代码的部分来解决它 但是一旦进入我的代码 它似乎不起作用 程序执行到这一步后 无论我输入什么 它都不会显示密码强度 而是显示一个空格 if EnteredPassword isupper or EnteredP
  • 将 nil 赋给 TImage.Picture.Graphic 来清除图片后,如何再次使用它?

    在下面的代码中 我清除了btnSaveClick中的图片 稍后在btnLoadClick中我想将图片分配给图像 但它给出了AV 因为Graphic对象不存在 我怎样才能完成任务 procedure TForm1 btnSaveClick S