Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вырезать и повернуть, или наоборот, повернуть и вырезать. 
:(
    Опции темы
aktuba
Дата 17.5.2007, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Нужен советы и идеи... Есть изображение и файл с координатами 4-х точек, примерно так:

user posted image

Мне необходимо забрать только отмеченную часть, т.е. необходимо повернуть изображение и вырезать выделенное. Или наоборот, сначала вырезать, потом повернуть, т.к. я думаю, что второй вариант будет работать быстрее. На словах вроде не сложно, а на деле...

Может кто занимался подобным? Есть примеры?



--------------------
user posted image
PM MAIL WWW Skype   Вверх
Alexeis
Дата 17.5.2007, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(aktuba @  17.5.2007,  08:36 Найти цитируемый пост)
Есть изображение и файл с координатами 4-х точек

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
aktuba
Дата 17.5.2007, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



4 точки образуют прямоугольник.


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Alexeis
Дата 17.5.2007, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Преобразование мировых координат + обрезка регионом. 
Переделал примерчик из Demos GDI+

использовал указанную в посте картинку. (под именем 1.jpg)

Код

program GDITEST48;

uses
  Windows,
  Messages,
  SysUtils,
  GDIPAPI,
  GDIPOBJ;

// One of the properties of the Graphics class is the clipping region.
// All drawing done by a given Graphics object is restricted to the clipping
// region of that Graphics object. You can set the clipping region by
// calling the SetClip method.

// The following example constructs a path that consists of a single polygon.
// Then the code constructs a region based on that path. The address of the
// region is passed to the SetClip method of a Graphics object, and then two
// strings are drawn.


Procedure OnPaint(DC: HDC);
var
  graphics : TGPGraphics;
  path: TGPGraphicsPath;
  Pen: TGPPen;
  region: TGPRegion;
  bmp : TGPImage;
  w, h : integer;
const
  polyPoints : array[0..3] of TGPPoint =
   ((x: 90 ; y: 160 ),
    (x: 250; y: 20 ),
    (x: 410; y: 220 ),
    (x: 250; y: 360));
begin
  graphics := TGPGraphics.Create(DC);
  path:= TGPGraphicsPath.Create;
  path.AddPolygon(PGPPoint(@polyPoints), 4);

  // Construct a region based on the path.
  region := TGPRegion.Create(path);
  // Draw the outline of the region.
  pen:= TGPPen.Create(MakeColor(255, 0, 0, 0));

  // Set the clipping region of the Graphics object.
  graphics.RotateTransform(41);
  graphics.TranslateTransform(0, -150);
  graphics.DrawPath(pen, path);
  graphics.SetClip(region);

  // Draw some clipped strings.
  bmp := TGPImage.Create('1.jpg');
  w := bmp.GetWidth;
  h := bmp.GetHeight;
  graphics.DrawImage(bmp, 0, 0, w, h);

  graphics.Free;
  bmp.Free;
  path.Free;
  region.Free;
end;


function WndProc(Wnd : HWND; message : UINT; wParam : Integer; lParam: Integer) : Integer; stdcall;
var
  Handle: HDC;
  ps: PAINTSTRUCT;
begin
  case message of
    WM_PAINT:
      begin
        Handle := BeginPaint(Wnd, ps);
        OnPaint(Handle);
        EndPaint(Wnd, ps);
        result := 0;
      end;

    WM_DESTROY:
      begin
        PostQuitMessage(0);
        result := 0;
      end;

   else
      result := DefWindowProc(Wnd, message, wParam, lParam);
   end;
end;

var
  hWnd     : THandle;
  Msg      : TMsg;
  wndClass : TWndClass;
begin
   wndClass.style          := CS_HREDRAW or CS_VREDRAW;
   wndClass.lpfnWndProc    := @WndProc;
   wndClass.cbClsExtra     := 0;
   wndClass.cbWndExtra     := 0;
   wndClass.hInstance      := hInstance;
   wndClass.hIcon          := LoadIcon(0, IDI_APPLICATION);
   wndClass.hCursor        := LoadCursor(0, IDC_ARROW);
   wndClass.hbrBackground  := HBRUSH(GetStockObject(WHITE_BRUSH));
   wndClass.lpszMenuName   := nil;
   wndClass.lpszClassName  := 'GettingStarted';

   RegisterClass(wndClass);

   hWnd := CreateWindow(
      'GettingStarted',       // window class name
      'Clipping with a Region',       // window caption
      WS_OVERLAPPEDWINDOW,    // window style
      Integer(CW_USEDEFAULT), // initial x position
      Integer(CW_USEDEFAULT), // initial y position
      Integer(CW_USEDEFAULT), // initial x size
      Integer(CW_USEDEFAULT), // initial y size
      0,                      // parent window handle
      0,                      // window menu handle
      hInstance,              // program instance handle
      nil);                   // creation parameters

   ShowWindow(hWnd, SW_SHOW);
   UpdateWindow(hWnd);

   while(GetMessage(msg, 0, 0, 0)) do
   begin
      TranslateMessage(msg);
      DispatchMessage(msg);
   end;
end.



Это сообщение отредактировал(а) Alexeis - 17.5.2007, 11:21


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.