Как получить доступ к информации о размере изображения с помощью кода

#image #delphi #firemonkey #delphi-10.1-berlin

#изображение #дельфы #огненный обезьянник #delphi-10.1-берлин

Вопрос:

Я использую Delphi 10.1 Berlin, и мне нужно создать изображение и установить его размер холста равным размеру растрового изображения. Чтобы быть более конкретным, я хочу получить доступ к этим свойствам: введите описание изображения здесь

Где сказано: «Размер по изображению». Но я не могу понять, как я могу получить к этому доступ, помогите, пожалуйста! 😀

РЕДАКТИРОВАТЬ: Это код, который я использую, если вам, ребята, нужно лучше понять, чего я пытаюсь достичь:

 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] MainFrm.pas (628): требуется запись E2018, тип объекта или класса’

Комментарии:

1. Я не уверен, правильно ли я понял вопрос. Но разрешение оригинала не должно быть imgProducto. Растровое изображение. Height и imgProducto. Растровое изображение. Ширина?. Это то, что вы ищете ?.

2. Я просто хочу иметь доступ к этому свойству «захватывать по изображению». Мне не нужна Высота и ширина моего Изображения

3. Я могу ошибаться, но я не думаю, что это свойство. Если вы хотите установить размер вашего TImage точно так же, как в исходном источнике, тогда просто сделайте: imgProdutoZoom. Высота:= imgProduto. Растровое изображение. Высота; и imgProductoZoom. Ширина := imgProduto. Растровое изображение. Ширина;

4. Нет, не сработало. ‘imgProdutoZoom. Высота’ — это сингл и ‘imgProdutoZoom. Растровое изображение. Высота’ — это целое число. Кроме того, мой образ просто исчезает…

5. Я крайне сбит с толку тем, чего вы пытаетесь достичь. Пожалуйста, прочтите весь ваш вопрос с нашей точки зрения, ничего не зная о том, что представляет собой ваш проект, и спросите себя, могли бы вы ответить на него на нашем месте?

Ответ №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);