[delphi] как вырезать картинку?

kozicin

задача такая
есть картинка, нужно как-то вырезать кусок прямоугольный из этой картинки и дальше уже работать с ней
delphi я тока начал изучать, так-что плиз поподробней

yolki

На форме два объекта TImage (верхний - Image1, нижний - Image2) одна кнопка.


procedure TForm1.Button1Click(Sender: TObject);
var
Pic, // Исходная картинка
Fragment // Копируемый фрагмент
: TBitmap;
Region1, // Границы фрагмента
Region2 // "принимающая область"
: TRect;
begin
// Создаём картинки
Pic:=TBitmap.Create;
Fragment:=TBitmap.Create;
// Загружаем из файла
Pic.LoadFromFile('a.bmp');
// рисуем на форме первую картинку
Image1.Canvas.Draw(0,0,Pic);
Fragment.Width := Image2.Width;
Fragment.Height := Image2.Height;
// задаём диапазоны копирования
Region1:= Rect(10,10,150,50);
Region2:= Rect(10,20,150,70);
// копируем фрагмент
Fragment.Canvas.CopyRect(Region2, Pic.Canvas , Region1);
// задаём цвет, толщину и заливку для эллипса
Fragment.Canvas.Pen.Color := clRed;
Fragment.Canvas.Pen.Width := 5;
Fragment.Canvas.Brush.Style:= bsClear;
// рисуем эллипс
Fragment.Canvas.Ellipse(0,0,80,100);

// рисуем модифицированный фрагмент на другом изображении
Image2.Canvas.Draw(0,0,Fragment);
Pic.Free;
Fragment.Free;
end;


Результат нажатия кнопки:

kozicin

thx

kozicin

насколько я понял, это копирование уже нарисованой части?
а если у меня картинка в принципе довольно большая, я ее когда вывожу ужимаю по размерам
а мне надо вырезать соответсвующий размер в исходном битмапе

yolki

Не понял.
тебе надо ресайзнуть картинку? или вырезать фрагмент?
Как вырезать фрагмент я вроде показал - а ресайзить - это немного другая наука..
Чтобы карсиво и гладенько было надо применять всякие бикубические сплайны..

kozicin

Description
This method draws Graphic to the printer canvas at the location (X,Y).
NOTE: Do not use Draw for bitmaps. Use PrintBitmap or PrintBitmapRect instead.

yolki

Description.
Call Draw to draw a graphic on the canvas. Draw calls the Draw method of the graphic. The image is rendered into a rectangle determined by the size of the graphic, with the upper left corner at the point (X, Y).
Graphics can be bitmaps, icons, or metafiles. If the graphic is a TBitmap object, the bitmap is rendered using the value of CopyMode.

Delphi 7 Professional

kozicin

хмм..
противоречиво как-то
или я че-то не понял?

rosali

Да ладно, чего противоречивого?..
Draw обеспечивает функциональность и абстракцию.
PrintBitmap обеспечивает производительность и... и производительность!

yolki

Ты выдержку из какой дельфи привёл?
Может, абстрактность для Draw появилась только в седьмых?
Оставить комментарий
Имя или ник:
Комментарий: