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

Вниз

Как сделать кроп картинки как в Фотошопе?   Найти похожие ветки 

 
igorium ©   (2011-10-14 12:26) [0]

Всем привет.
Есть Image.
На неё кидаю картинку Jpeg.

Задача - нарисовать поверх картинки прямоугольник с определенным соотношением сторон (3х4), который можно увеличивать, уменьшать и двигать (все действия только внутри Image).
После нажатия на кнопку скопировать картинку, которая оказалось внутри прямоугольника в другой Image.

Собственно непонятно из чего делать прямоугольник, чтобы он соответствовал моим требованиям ???


 
Ega23 ©   (2011-10-14 12:37) [1]

Код старый, ему уже лет 10

procedure TFPreviewPhoto.imgPhotoMouseMove(Sender: TObject;
 Shift: TShiftState; X, Y: Integer);
var
Top, Bottom, Left, Right : Integer;
begin

if IsFrame then if MouseInFrame(X,Y) then
   pbMain.Cursor:=crSizeAll else pbMain.Cursor:=crDefault;

if not IsFrameDrawing then Exit;

// Отрисовать Frame по старым координатам
DrawFrame;

Top:=CutFrame.Top+(Y-DragPoint.y);
Bottom:=CutFrame.Bottom+(Y-DragPoint.y);

if (Top>0) and (Bottom<pbMain.Height) then
 begin
  CutFrame.Top:=Top;
  CutFrame.Bottom:=Bottom;
 end;

Left:=CutFrame.Left+(X-DragPoint.x);
Right:=CutFrame.Right+(X-DragPoint.x);

if (Left>0) and (Right<pbMain.Width) then
 begin
  CutFrame.Left:=Left;
  CutFrame.Right:=Right;
 end;

DragPoint.x:=X;
DragPoint.y:=Y;

DrawFrame;
end;

function TFPreviewPhoto.MouseInFrame(const X, Y: Integer): Boolean;
var
Xreal, Yreal : Double;
begin

if (X>=CutFrame.Left) and (X<=CutFrame.Right) and
   (Y>=CutFrame.Top) and (Y<=CutFrame.Bottom) then
 Result:=True
else Result:=False;
end;

//******************************************************************************** *****

procedure TFPreviewPhoto.DrawFrame;
var
OldPenMode:TPenMode;
OldPenStyle:TPenStyle;
begin

With pbMain.Canvas do
 begin
  OldPenMode:=Pen.Mode;
  OldPenStyle:=Pen.Style;

  Pen.Style:=psDot;
  Pen.Mode:=pmXOR;

  MoveTo(CutFrame.Left,CutFrame.Top);
  LineTo(CutFrame.Right,CutFrame.Top);
  LineTo(CutFrame.Right,CutFrame.Bottom);
  LineTo(CutFrame.Left,CutFrame.Bottom);
  LineTo(CutFrame.Left,CutFrame.Top);

  Pen.Style:=OldPenStyle;
  Pen.Mode:=OldPenMode;
 end;

FrameFl:=not FrameFl;
end;

//******************************************************************************** *****

procedure TFPreviewPhoto.InitFrame;
var
Width, Height : Integer;
begin
// ширина и высота в относительных координатах (на PaintBox"e)
Width:=Trunc(CutFrameWidth*pbMain.Width/MainBitmap.Width);
Height:=Trunc(CutFrameHeight*pbMain.Height/MainBitmap.Height);

CutFrame.Left:=(pbMain.Width div 2) - (Width div 2);
CutFrame.Right:=(pbMain.Width div 2) + (Width div 2);
CutFrame.Top:=(pbMain.Height div 2) - (Height div 2);
CutFrame.Bottom:=(pbMain.Height div 2) + (Height div 2);

end;

//******************************************************************************** *****



Суть такова: в Image попадала фотография с цифровика. Потом отрисовывалась рамка определённого размера. Но MouseMove можно было её подвигать. В конце из фотографии вырезался тот кусок, который в рамке.


 
Inovet ©   (2011-10-14 13:47) [2]

Ещё есть стандартная рамка, которая на раьочем столе и проводнике:
DrawFocusRect
http://msdn.microsoft.com/en-us/library/dd162479%28VS.85%29.aspx


 
igorium ©   (2011-10-15 11:48) [3]

Спасибо буду разбираться.



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

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

Наверх




Память: 0.47 MB
Время: 0.007 c
2-1319387079
Анна
2011-10-23 20:24
2012.01.29
срочна нужна помощь в написании прогррамм...


1-1282292479
TComponent
2010-08-20 12:21
2012.01.29
Компонент для сетевой структуры


2-1318975668
Gu
2011-10-19 02:07
2012.01.29
номер недели


15-1318427502
Бездомный
2011-10-12 17:51
2012.01.29
Юморок


2-1319200755
Laguna
2011-10-21 16:39
2012.01.29
"Правильная " сортировка чисел в ListBox