标签: timage

FireMonkey iOS RAD Studio XE2 - 在从URL加载的表单上显示图像

是否可以在iOS的FMX表单上放置TImage并将URL中的图像(jpg)加载到此TImage中以显示在iOS应用程序中?

我试过没有成功.任何提示或正确方向的点都值得赞赏.

delphi url timage ios firemonkey

18
推荐指数
1
解决办法
3476
查看次数

在Delphi中很好地缩放图像?

我正在使用Delphi 2009,我想缩放图像以适应可用空间.图像始终显示小于原始图像.问题是TImage Stretch属性做得不好,损害了图片的可读性.

丑陋的方式http://xrw.bc.ca/download/so/TImageStretch.gif

我希望看到它像这样缩放:

更好的方式http://xrw.bc.ca/download/so/NicerTImageStretch.png

有什么建议如何最好地做到这一点?试过JVCL,但它似乎没有这种能力.一个免费的图书馆会很好,但也许有一个低成本的图书馆,"只"这也很好.

delphi graphics timage image-scaling

15
推荐指数
3
解决办法
2万
查看次数

Delphi-自XE8起如何正确注册图形类?

我正在编写一个Delphi包,该包提供了一个新的自定义TGraphic对象,从而允许在VCL组件(如TImage)中读取新的图像格式。

我最初使用RAD Studio XE7开发了此程序包,并且运行良好。但是,我最近迁移到了RAD Studio编译器的较新版本,尽管我的软件包在该新版本上仍能正常工作,但我注意到一个从未出现过的奇怪错误。

我有一个包含多个组件的表单,其中一些是TImage组件。打开IDE之后,我在设计时第一次打开项目时,所有包含我的自定义TGraphic组件的TImage组件都会立即释放其内容。如果我关闭然后重新打开该项目,图像将重新出现,并且在我关闭并重新打开IDE之前该错误不再发生。

我挖了我的代码以了解可能导致此问题的原因。要注册我的自定义TGraphic组件,我使用类初始化部分,在其中编写了以下代码:

initialization
begin
    Vcl.Graphics.TPicture.RegisterFileFormat('svg', 'Scalable Vector Graphics', TWSVGGraphic);
end;
Run Code Online (Sandbox Code Playgroud)

但是我发现,从XE8编译器版本开始,在初始化部分之前就调用了TImage构造函数,因此显然引起了上述问题。自XE8以来的所有编译器版本均会受到影响,但是此错误从未在XE7或更早版本上发生。自XE8以来,情况发生了变化。

这是我的问题:

  • 我用来注册自定义图形类的方法是否正确?
  • 如果没有,正确的方法是什么?
  • 自XE8以来似乎有所不同,注册图形组件的新正确方式是什么?
  • 还有其他人遇到过同样的问题吗?他是如何解决的?
  • 这可能是RAD Studio的新错误,还是这个问题就在我这边?

delphi components timage registration delphi-xe8

11
推荐指数
1
解决办法
232
查看次数

单击控件时如何获取鼠标的坐标?

在TImage的OnClick事件中,我想提取鼠标的x,y坐标.我更喜欢它们与图像有关,但与形式或窗口相关也同样好.

delphi mouse timage

10
推荐指数
3
解决办法
4万
查看次数

JPEG数据流到TImage

我有一些图像文件存储在一个文件中(某种存档).那个文件看起来像这样:

在此输入图像描述

好吧,它分为两个部分 - 标题和数据段.标题(绿色)包含各种信息,例如专辑名称,位置,日期/时间,描述,相册中的照片数量等.数据段(蓝色和橙色)结构简单,包含N x JPEG照片.我可以将"imagedata"段提取到新的TMemoryStream对象中,现在我想使用TImage来显示它.

我可以使用TMemoryStream的SaveAsFile方法,设置一些临时文件名,从TImage加载该文件,然后删除临时文件.这是有效的,但我想知道是否有任何方法可以使用temp将该流发送到TImage中.文件.

当然,我可以编写代码来提取硬盘上的所有文件,但问题是我有很多这样的档案,只是想写应用程序来阅读那些"专辑",而不是在我的硬盘上有20,000多张照片.

简而言之,我想要的只是进行以下程序工作(没有使用临时文件)

procedure ShowImageFromStream(data: TStream; img: TImage);
begin
...
end;
Run Code Online (Sandbox Code Playgroud)

提前致谢.

delphi timage delphi-7 filestream

9
推荐指数
1
解决办法
1万
查看次数

如何从ImageList加载透明图像?

我想从一个加载图像(32比特深度,透明的)TImageList到一个TImage.标准方法是ImageList.GetBitmap(Index, Image.Picture.Bitmap);.但是该GetBitmap方法不适用于透明度,因此我总是得到一个非透明的位图.

delphi png transparency timage timagelist

9
推荐指数
1
解决办法
2万
查看次数

如何加载小系统图标?

我需要显示16x16像素图标以显示错误/警告/信息.不幸的是LoadIcon(0, IDI_*),LoadImage(0, OIC_*, IMAGE_ICON, 16, 16, LR_SHARED)我总是给我32x32版本的图标.

我读过ShGetStockIconInfo但是只能从Vista开始,我仍然需要支持XP.

有任何想法吗?

TImage如果重要的话,我正在使用Delphi 2010和一个组件.

delphi timage loadimage

8
推荐指数
1
解决办法
3600
查看次数

如何将BLOB流中的任意图像加载到TImage中?

如果我理解正确,请TImage.LoadFromFile从文件扩展名确定图片类型.

有没有办法从TBlobStream原始图像中自动检测图像类型?

我目前的代码:

procedure LoadImageFromStream(AImage: TImage; ADataSet: TDataSet);
var
  Stream: TStream;
begin
  Stream := ADataSet.CreateBlobStream(Field, bmRead);
  try
    AImage.Picture.Graphic.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end
Run Code Online (Sandbox Code Playgroud)

delphi timage stream detect delphi-2007

8
推荐指数
2
解决办法
1万
查看次数

Delphi - 从 Rio 10.3.3 开始如何正确注册自定义图形类

所以我正在开发一个图形库,提供一个自定义的 SVG 图像格式,可以在 TPicture 或任何支持图形图像的 VCL 组件中使用,例如 TImage。我从 XE7 编译器版本开始编写和维护我的库包,我的代码向后兼容直到 XE2 版本。

为了向 IDE 声明我的自定义图形格式,我从initialization我的图形类部分调用以下代码

Vcl.Graphics.TPicture.RegisterFileFormat('svg', 'Scalable Vector Graphics', TWSVGGraphic);
Run Code Online (Sandbox Code Playgroud)

然而,自上一个 RAD Studio 10.3.3 Rio 版本以来,这似乎不再有效。我过去已经遇到过类似的问题,为此我可以找到解决方案: Delphi - How to correct register a graphics class since XE8?

因此,显然 Embarcadero 更改了自 10.3.3 Rio 版本以来的规则。再来一次。自此版本以来,我的图形类不再正确注册。有时是,有时不是。例如,当我第一次打开我的 IDE 时,它不是。当我尝试在设计时调试我的包时,它是。当我尝试运行一个项目时,有时是,有时不是。

有人遇到过类似的问题吗?initialization在最新的编译器版本中,有关该部分的规则是否有所更改?最后,我的代码到底有什么问题?

或者,即使经过这么多年,我仍然不明白如何在 Delphi 中正确注册图形类。在这种情况下,如果有人可以向我解释如何正确注册图形类,我将不胜感激,以便将来不再遇到此类问题。

delphi components timage registration delphi-10.3-rio

8
推荐指数
0
解决办法
384
查看次数

通过分配Image1.Picture:= nil清除图像; 导致内存泄漏?

我在这里阅读http://delphi.about.com/od/adptips2005/qt/cleartimage.htm,从TImage中清除图像的一种方法是将nil分配给.Picture,如下所示:

Image1.Picture := nil;
Run Code Online (Sandbox Code Playgroud)

我只是想确定...我想这Image1.Picture.loadFromFile(fileName)将分配一些内存并简单地将其设置为nil,而不释放内存,将导致内存泄漏.

我对么?如果是这样,这是从TImage卸载和清除图像的"正确"方法吗?

delphi timage

7
推荐指数
1
解决办法
1718
查看次数