我正在尝试创建一个需要加载的漫画查看器JPG
像 1000*16000 这样的大尺寸图像,我的应用程序是在 delphi FMX 中,我已经尝试过使用TImage
, TImageViewer
, TImageControl
但他们都使用TBitmap
将尺寸修剪为8192
加载图像后
我尝试搜索图像库,但找不到任何内容FMX (firemonkey)
我在想也许我可以将图像加载到Memory stream
然后将其复制并以较小的尺寸绘制为多个位图?但我不知道如何读取和解析内存流,并且只选择某个干净的高度!
最后我正在寻找一种方法来加载和显示这些大的(1000*16000
) 中的图像Delphi FMX
我使用的是delphi 10.2.3
Thanks.
编辑01:
我想我已经找到了一种可以让事情变得简单的方法,我添加了Vcl.Imaging.jpeg
to 使用子句中的FMX (FireMonkey)
然后我用了TJPEGImage
并加载图像,我打印了宽度和高度,它们是正确的并且没有修剪!所以我在想,也许我可以读取每个像素TJPEGImage.canvas
然后将其打印到FMX TBitmap
?,您对这种方法有何看法?,您知道复制里面数据的好方法吗?TJPEGImage
to FMX TBitmap
?
编辑02:
我找到了一个新的解决方案,TBitmapSurface
,这个类好像没有TBitmap
限制,我能够加载其中的图像而不被修剪!但有一个问题!我怎样才能把这个给TImage
?如果我简单地说Image.bitmap.assign(TBitmapsurface)
,然后图像再次被修剪!所以看来唯一可能的方法是重写TImage
所以它使用TBitmapSurface
代替TBitmap
,感谢有关此问题的任何帮助,谢谢。
这是代码TBitmapSurface
:
bitmapSurf := TBitmapSurface.Create;
TBitmapCodecManager.LoadFromFile(path, bitmapSurf);
Unlike FMX.Graphics.TBitmap
其大小限制为8192 * 8192
, FMX.Surface.TBitmapSurface
似乎支持最多16k * 16k
甚至可能更多(我没有测试过),所以使用FMX.Surface.TBitmapSurface
您可以加载图像而无需修剪,然后您可以轻松地将其分成两部分FMX.Graphics.TBitmap
(或者可能使用相同方法的更多部分)
下面你可以看到首先加载的代码JPG
into TBitmapSurface
,然后是将其分成两部分的代码TBitmap
:
var
srce, dest: TBitmapSurface;
path: string;
scan: integer;
w, h1, h2: integer;
begin
path := 'C:\tmp\Imgs\res.bmp';
srce := TBitmapSurface.Create;
TBitmapCodecManager.LoadFromFile(path, srce);
dest := TBitmapSurface.Create;
// first half
w := srce.Width;
h1 := srce.Height div 2;
dest.SetSize(w, h1, TPixelFormat.RGBA);
for scan := 0 to h1-1 do
Move(srce.Scanline[scan]^, TBitmapSurface(dest).Scanline[scan]^, srce.Width * 4);
Image1.Bitmap.Assign(dest);
// second half
h2 := srce.Height - h1;
dest.SetSize(w, h2, TPixelFormat.RGBA);
for scan := h1 to srce.Height-1 do
Move(srce.Scanline[scan]^, TBitmapSurface(dest).Scanline[scan-h1]^, srce.Width * 4);
Image2.Bitmap.Assign(dest);
end;
这个答案是使用第一篇文章的评论和我的其他问题的答案提供的:
如何在 FMX.Graphics.TBitmap 上绘制 FMX.Surface.TBitmapSurface https://stackoverflow.com/questions/51523321/how-to-draw-fmx-surface-tbitmapsurface-on-fmx-graphics-tbitmap/51526855#51526855
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)