Перейти к содержанию
Fire Monkey от А до Я
  • 0

Область, занимаемая TBitmap


Alex7wrt

Вопрос

Часто при отрисовке битмапа на холсте используется метод DrawBitmap, где, в частности, в качестве аргумента необходимо указать прямоугольные области источника (SrcRect) и приемника (DestRect). Эти прямоугольники имеют формат записи (Left, Top, Right, Bottom).

При указании в качестве SrcRect всего битмапа целиком как здесь на формуме так и в книге Осипова я встречал такую запись:

RectF(0,0,ABitmap.Width,ABitmap.Height)

Но моя логика подсказывает, что такой битмап должен иметь размеры на 1 пиксель по горизонтали и вертикали больше, чем на самом деле, ведь первый пиксель имеет координаты (0;0), а последний (ABitmap.Width,ABitmap.Height). Что, наверное, приводит к искажениям при отображении битмапа на холсте.

Мне думается, что при рисовании целого битмапа следует писать так:

RectF(0,0,ABitmap.Width-1,ABitmap.Height-1)

Прав ли я или не прав? Если нет, то почему?

Изменено пользователем Alex7wrt
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Не верно) поскольку, как правильно отмечено отмечено, нумерация с нуля, то битмап, имеющий размер 100 пиксел, заканчивается на числе 99 (0 - 99 = 100). Отсюда и такое указание. То бишь при размере 100 указывается фактически размер 0 - 99, и последний пиксел 99.

Изменено пользователем Gingercat
Ссылка на комментарий
  • 0
7 часов назад, Alex7wrt сказал:

Прав ли я или не прав? Если нет, то почему?

потому что вы видите Width/Height,  а рассуждаете про Right/Bottom

в GDI, где указывались именно координаты, а не ширина/высота, тем не менее, эта единичка тоже отнималась внутри функции, так что самому это делать было также не нужно))

Ссылка на комментарий
  • 0
  • Модераторы

У TBitmap есть метод BoundsF, достаточно посмотреть его реализацию

property BoundsF: TRectF read GetBoundsF;
...
function TBitmap.GetBoundsF: TRectF;
begin
  Result := TRectF.Create(0, 0, Width, Height);
end;

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...