Форум: "Media";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизРисование на масштабированном изображении Найти похожие ветки
← →
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 вся ветка
Форум: "Media";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.057 c