Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2011, 23:04   #1
Montysson
Пользователь
 
Аватар для Montysson
 
Регистрация: 16.10.2011
Сообщений: 32
По умолчанию Непонятный касяк при масштабировании

Всем доброго времени суток!!

При масштабировании изображения появляется какой то странный касяк, вообщем, я к примеру увеличиваю изображение, а потом рисую на нем прямоугольную область выделения толщиной в 1 пиксель, а у меня рисуется толщиной в 3-4, в чем дело?

А если я уменьшаю изображение, то наоборот линия становится тонкой, а иногда пропадает

Вот таким вот образом рисую прямоугольную область:

Код:
procedure DrawShape(Image: TImage; TopLeft, BottomRight: TPoint;
  AMode: TPenMode; DrawingTool: TDrawingTool; APenWidth: Integer);
begin
  with Image.Canvas do
  begin
    Pen.Mode := AMode;
    Pen.Style := psSolid;
    Pen.width := APenWidth;
    Brush.Style := bsClear;
    case DrawingTool of
      dtRectangle:
        Rectangle(TopLeft.X, TopLeft.Y, BottomRight.X, BottomRight.Y);
      dtEllipse:
        Ellipse(TopLeft.X, TopLeft.Y, BottomRight.X, BottomRight.Y);
    end;
  end;
end;

DrawShape(Image, BasicRt.TopLeft, BasicRt.BottomRight, pmNotXor,
  dtRectangle, APenWidth);
APenWidth = 1;

На стрелку, которая указывает на процент повреждения можете не смотреть.





Montysson вне форума Ответить с цитированием
Старый 15.12.2011, 23:19   #2
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Как происходит масшатбирование?
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 15.12.2011, 23:27   #3
Montysson
Пользователь
 
Аватар для Montysson
 
Регистрация: 16.10.2011
Сообщений: 32
По умолчанию

Да очень просто, есть коэффициент масштабирования ScaleCoef, изначально он равен 1 и есть две кнопки + и -

К примеру вот код для плюса:

Код:
procedure TfrmMain.btnZoomInClick(Sender: TObject);
begin
  if ScaleCoef < 3 then
  begin
    ScaleCoef := ScaleCoef + 0.2;
    SetImageSize;
    if ScaleCoef >= 3 then
      btnZoomIn.Enabled := False;
    if ScaleCoef >= 0.2 then
      btnZoomOut.Enabled := True;
  end;
end;

procedure TfrmMain.SetImageSize;
begin
  imgMain.Picture.Assign(BuffImg.Picture.Graphic); // Из буфера
  imgMain.AutoSize := False;
  imgMain.Stretch := True;
  imgMain.Width := Round(OrignWidth * ScaleCoef); // OrignWidth  это изначальная длина картинки
  imgMain.Height := Round(OrignHeight * ScaleCoef);
  SetImagePosition(imgMain, ScrollBox.Width, ScrollBox.Height);
  BuffImg.Width := imgMain.Width;
  BuffImg.Height := imgMain.Height;
  BuffImg.Stretch := True;
  BuffImg.AutoSize := False;
end;
Montysson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с выравниванием при масштабировании wois HTML и CSS 5 06.12.2011 08:45
C# непонятный код raok Помощь студентам 4 21.05.2011 14:15
непонятный баг brain-bras Общие вопросы C/C++ 4 14.10.2009 21:26
Непонятный синтаксис. jojahti Общие вопросы C/C++ 10 14.10.2009 19:05
непонятный компилятор Waleriy Общие вопросы по Java, Java SE, Kotlin 2 11.12.2008 14:16