Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Рисование на масштабированном изображении   Найти похожие ветки 

 
simmoril ©   (2004-01-05 21:58) [0]

Моя проблема заключается в том, что мне надо нарисовать линию на уже масштабированной картинке.
Например, есть рисунок в формате bmp размером 1180 ґ800 пикселей.
Размер Image1 должен быть бы таким же, но, учитывая масштаб, размер Image1 не более 273ґ233 пикселей.
Вот процедура масштабирования
procedure scale_(var imag:timage; var scale:real);
var rx,ry: Extended;  cw,ch,w,h:integer;
begin
 scale:=1;
 cw:=imag.Width; ch:=imag.Height;
 w:=imag.Picture.Bitmap.Width; h:=imag.Picture.Bitmap.height;
 if (h>ch) or(w>cw) then
  begin
   rx:=cw/w; ry:=ch/h;
   if rx>ry then scale:=ry else scale:=rx;
   imag.WIDTH:=round(w*scale);  imag.height:=round(h*scale);
   Imag.Stretch := True;  //Imag.Update;
  end
else begin
Imag.Stretch := false; imag.Width:=imag.Picture.Bitmap.Width; imag.Height:=imag.Picture.Bitmap.height;
      end;
end;
{Таким образом вся информация из bmp-файла сохраняется}
Ясно, что при масштабировании изображений некоторые пиксели(на рисунке- какие-то его части, например, линии) не видны.
Я рисую линию на уже масштабированной картинке(масштабирование происходит сразу же после открытия файла) и, соответственно, получаю не все нарисованные пиксели, а лишь их часть, линия видна как пунктирная или вообще состоит из отдельных точек.
Image1.picture.Bitmap.Canvas.moveTo(x2,y2);
image1. picture.Bitmap.Canvas.LineTo(x3,y3);

если я рисую на канве Image1, то получаю ту же проблему с неполной прорисовкой линии! Почему?
Image1.Canvas.moveTo(x2,y2);
image1.Canvas.LineTo(x3,y3);

на Form1.canvas  рисовать я не могу, потому что image  помещен Scrollbox.
Пожалуйста, подскажите, на чем и как рисовать мне эту линию, чтобы она была видна полностью на масштабированном изображении?


 
Mihey ©   (2004-01-05 23:23) [1]

Очевидно, масштабирование изображения происходит в памяти. Т.е., реально размеры изображения не меняются, не меняются размеры канвы, а само изображение растягивается или сжимается только перед выводом.

Возможные варианты. Загружай изображение в объект TBitmap, масштабируй его в другой TBitmap и присваивай его уже Timage или работай так. Т.е. добейся, чтобы работа велась с уже замасштабированным изображением.

Ну или для какихто целей может подойти - использовать более хороший фильтр масштабирования, которой сохранит контур линии.


 
Mihey ©   (2004-01-05 23:25) [2]

Конктреней по поводу первого варианта - см. StretchDraw в справке.


 
simmoril ©   (2004-01-06 01:40) [3]

Сделала по первому варианту,все работает отлично.

Mihey, Спасибо за помощь!


 
Галинка ©   (2004-02-04 10:29) [4]

У меня вопрос по-проще. Как вообще нарисовать ломанную на отмасштабированном рисунке в том месте где укажет пользователь. А то она у меня сдвигается соответственно масштабу.

Помогите кто может... :)



Страницы: 1 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.049 c
6-1078824782
Дмитрий
2004-03-09 12:33
2004.05.02
Определение MAC адреса НЕ виндявой тачки


14-1081422644
Oksana
2004-04-08 15:10
2004.05.02
Люди, дайте совет


1-1082015581
siriusP
2004-04-15 11:53
2004.05.02
Как сохранить, загрузить содержимое фрейма в Bitmap?


8-1075984374
m-AAA-d
2004-02-05 15:32
2004.05.02
DelphiX D3DRM


14-1081781692
Undert
2004-04-12 18:54
2004.05.02
SSL сертификат