Главная страница
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.059 c
1-1082025258
Flahas
2004-04-15 14:34
2004.05.02
exel v dbgrid...


4-1077778464
Wontar
2004-02-26 09:54
2004.05.02
Как сделать чтобы нельзя было удалить процесс моей программы.


14-1081435540
TButton
2004-04-08 18:45
2004.05.02
Про глобальные переменные


1-1081848714
SergP
2004-04-13 13:31
2004.05.02
"Засунуть" ProgressBar в StatusBar


7-1079237234
$tranger
2004-03-14 07:07
2004.05.02
Запись звука через микрофон