是否可以在iOS的FMX表单上放置TImage并将URL中的图像(jpg)加载到此TImage中以显示在iOS应用程序中?
我试过没有成功.任何提示或正确方向的点都值得赞赏.
我正在使用Delphi 2009,我想缩放图像以适应可用空间.图像始终显示小于原始图像.问题是TImage Stretch属性做得不好,损害了图片的可读性.
丑陋的方式http://xrw.bc.ca/download/so/TImageStretch.gif
我希望看到它像这样缩放:
更好的方式http://xrw.bc.ca/download/so/NicerTImageStretch.png
有什么建议如何最好地做到这一点?试过JVCL,但它似乎没有这种能力.一个免费的图书馆会很好,但也许有一个低成本的图书馆,"只"这也很好.
我正在编写一个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以来,情况发生了变化。
这是我的问题:
在TImage的OnClick事件中,我想提取鼠标的x,y坐标.我更喜欢它们与图像有关,但与形式或窗口相关也同样好.
我有一些图像文件存储在一个文件中(某种存档).那个文件看起来像这样:

好吧,它分为两个部分 - 标题和数据段.标题(绿色)包含各种信息,例如专辑名称,位置,日期/时间,描述,相册中的照片数量等.数据段(蓝色和橙色)结构简单,包含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)
提前致谢.
我想从一个加载图像(32比特深度,透明的)TImageList到一个TImage.标准方法是ImageList.GetBitmap(Index, Image.Picture.Bitmap);.但是该GetBitmap方法不适用于透明度,因此我总是得到一个非透明的位图.
我需要显示16x16像素图标以显示错误/警告/信息.不幸的是LoadIcon(0, IDI_*),LoadImage(0, OIC_*, IMAGE_ICON, 16, 16, LR_SHARED)我总是给我32x32版本的图标.
我读过ShGetStockIconInfo但是只能从Vista开始,我仍然需要支持XP.
有任何想法吗?
TImage如果重要的话,我正在使用Delphi 2010和一个组件.
如果我理解正确,请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) 所以我正在开发一个图形库,提供一个自定义的 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 中正确注册图形类。在这种情况下,如果有人可以向我解释如何正确注册图形类,我将不胜感激,以便将来不再遇到此类问题。
我在这里阅读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 ×10
timage ×10
components ×2
registration ×2
delphi-2007 ×1
delphi-7 ×1
delphi-xe8 ×1
detect ×1
filestream ×1
firemonkey ×1
graphics ×1
ios ×1
loadimage ×1
mouse ×1
png ×1
stream ×1
timagelist ×1
transparency ×1
url ×1