我正在尝试创建一个漫画查看器,该查看器需要加载JPG
大尺寸图像(如1000 * 16000),我的应用程序是在delphi FMX中,并且我已经尝试使用TImage
,{{1 }},TImageViewer
,但所有人都使用TImageControl
,这会在加载图像后将尺寸调整为TBitmap
我尝试搜索图片库,但找不到8192
的任何内容
我在想,也许我可以将图像加载到FMX (firemonkey)
中,然后将其复制并绘制为较小的尺寸,以绘制几个位图?但是我不知道如何读取和解析内存流,而只能选择一个干净的高度!
最后,我正在寻找一种加载并显示Memory stream
中的大图像(1000*16000
)的方法
我正在使用delphi 10.2.3
谢谢。
编辑01:
我认为我找到了一种可能使事情变得容易的方法,我在Delphi FMX
的{s1}}中添加了use子句,然后使用Vcl.Imaging.jpeg
并加载了图像,并打印了宽度和高度,他们是正确的,没有修剪!所以我在想,也许我可以从FMX (FireMonkey)
中读取每个像素,然后将其打印到TJPEGImage
中?您对这种方法有何看法?您知道在{中复制数据的好方法吗?从{1}}到TJPEGImage.canvas
?
编辑02:
我找到了一个新的解决方案FMX TBitmap
,看来该类没有TJPEGImage
的限制,而且我能够在其中加载图像而不会被修剪!但有个问题!我该如何给FMX TBitmap
?如果我只是说TBitmapSurface
,则图像会再次被修剪!因此,似乎唯一可行的方法是重写TBitmap
,使其使用TImage
而不是Image.bitmap.assign(TBitmapsurface)
,有关此问题的任何帮助都将受到感谢。
这是TImage
的代码:
TBitmapSurface
答案 0 :(得分:0)
与大小限制为FMX.Graphics.TBitmap
的{{1}}不同,8192 * 8192
似乎支持多达FMX.Surface.TBitmapSurface
甚至可能更多(我尚未测试),因此请使用16k * 16k
可以加载图像而不会被修剪,然后可以轻松地将其拆分为两个FMX.Surface.TBitmapSurface
(或使用相同的方法可以将更多部分拆分)
在下面,您将看到首先将FMX.Graphics.TBitmap
加载到JPG
中的代码,然后将其拆分为两个TBitmapSurface
的代码:
TBitmap
此答案是使用第一篇文章的评论和我的其他问题的答案提供的:
How to draw FMX.Surface.TBitmapSurface on FMX.Graphics.TBitmap