【问题标题】:How access size information of a image via code如何通过代码访问图像的大小信息
【发布时间】:2016-10-19 21:31:41
【问题描述】:

我正在使用 Delphi 10.1 Berlin,我需要创建一个图像并将其画布大小设置为等于位图大小。更具体地说,我想访问此属性:

在哪里说:“按图像大小”。但我不知道如何才能访问这个,请帮助! :-D

编辑:这是我正在使用的代码,如果你们需要更好地理解我想要实现的目标:

imgProdutoZoom := TImage.Create(rtFundoArredondadoZoom);
imgProdutoZoom.Parent := rtFundoArredondadoZoom;
imgProdutoZoom.Align := TAlignLayout.Client;
imgProdutoZoom.Bitmap.Assign(imgProduto.Bitmap);
imgProdutoZoom.WrapMode := TImageWrapMode.Fit;
imgProdutoZoom.Name := 'imgZoom'+ IntToStr(i);

我找到了这个代码:imgProdutoZoom.MultiResBitmap.SizeKind.Source; 但是控制台给我一个错误:'[dcc32 Error] MainFrm.pas(628): E2018 Record, object or class type required'

【问题讨论】:

  • 我不确定我的问题是否正确。但原件的分辨率不应该是 imgProducto.Bitmap.Height 和 imgProducto.Bitmap.Width ?这就是你要找的吗?。
  • 我只想访问此属性“按图像捕获”。我不想要图像的高度和宽度
  • 我可能是错的,但我不认为这是一个属性。如果您想将 TImage 的大小设置为与原始源完全相同,那么只需执行以下操作: imgProdutoZoom.Height := imgProduto.Bitmap.Height;和 imgProductoZoom.Width := imgProduto.Bitmap.Width;
  • 不,没用。 “imgProdutoZoom.Height”是一个单数,“imgProdutoZoom.Bitmap.Height”是一个整数。我的形象也消失了......
  • 我对您要完成的工作感到非常困惑。请从我们的角度阅读您的整个问题,对您的项目一无所知,然后问问自己,如果您是我们,您是否可以回答?

标签: image delphi firemonkey delphi-10.1-berlin


【解决方案1】:

您没有显示rtFundoArredondadoZoom 是什么,但我认为它是TRectangle

当你设置时

imgProdutoZoom.Parent := rtFundoArredondadoZoom;
imgProdutoZoom.Align := TAlignLayout.Client;

您告诉填满父区域 (rtFundoArredondadoZoom)。但是,由于TImage.WrapMode 默认为TImageWrapMode.Fit,因此图像会保持其纵横比并且不会拉伸以填充父级。

现在,设置中的限制因素是rtFundoArredondadoZoom 矩形,特别是它的高度。要以全尺寸显示图像,您需要设置

rtFundoArredondadoZoom.Height := imgProdutoZoom.Bitmap.Height;

您有时可能还想设置矩形的宽度。

下图在左侧显示了原始大小的图像,并且基本上使用您的代码在高度较小的矩形上显示了相同的图像

然后在矩形上应用高度设置后

您相应更正的代码将是:

imgProdutoZoom := TImage.Create(rtFundoArredondadoZoom);
imgProdutoZoom.Parent := rtFundoArredondadoZoom;
imgProdutoZoom.Align := TAlignLayout.Client;
imgProdutoZoom.Bitmap.Assign(imgProduto.Bitmap);
// imgProdutoZoom.WrapMode := TImageWrapMode.Fit; // not needed
rtFundoArredondadoZoom.Height := imgProdutoZoom.Bitmap.Height; // add this
imgProdutoZoom.Name := 'imgZoom'+ IntToStr(i);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2019-03-16
    • 2010-09-26
    • 1970-01-01
    相关资源
    最近更新 更多