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

Вниз

Как разрезать рисунок?   Найти похожие ветки 

 
Volf_555   (2005-10-29 22:25) [0]

Есть много рисунков одинакого размера (ширина, высота), надо каждый рисунок разрезать на 5 равных частей и каждую часть сохранить в файлы. Как это осуществить?


 
Desdechado ©   (2005-10-29 22:31) [1]

Равных по какому признаку? По площади? Или по форме? Прямоугольники или еще что?


 
Volf_555   (2005-10-29 22:45) [2]

В рисунке 5  прямоугольных одинаковых областей.


 
Zeqfreed ©   (2005-10-29 22:53) [3]

Volf_555   (29.10.05 22:45) [2]
См. BitBlt, TCanvas.CopyRect


 
Volf_555   (2005-10-29 23:33) [4]

Не раздуплюсь как этим воспользоваться...
TCanvas.CopyRect(const Dest:TRect; Canvas:TCanvas;const Source:TRect);

На форме есть Image1-6
В Image1 загружается главный рисунок, в остальные Image_ - результат обработки.

Что мне писать в качестве Dest, Canvas и Source? (Используя ширину и длину копируемого участка)


 
Zeqfreed ©   (2005-10-30 00:46) [5]

Volf_555   (29.10.05 23:33) [4]
program cut_bmp;

uses
 Windows,
 SysUtils,
 Classes,
 Graphics;

var
 OriginalBMP : TBitmap;
 i : Integer;
 sc : Integer = 0;

procedure EvalParam(const idx : Integer);
var
 coords : TStrings;
 j : Integer;
 bmp : TBitmap;
 r : TRect;
begin
 coords := TStringList.Create;
 try
  coords.Delimiter := ",";
  coords.DelimitedText := ParamStr(idx);
  if coords.Count < 4 then begin
   MessageBox(0, PChar(Format("Not enough coordinates passed in parameter #%d", [idx])), "Cut utility", MB_OK or MB_ICONWARNING);
   Exit;
  end;

  try
   r.Left := StrToInt(coords[0]);
   r.Top := StrToInt(coords[1]);
   r.Right := StrToInt(coords[2]);
   r.Bottom := StrToInt(coords[3]);
  except
   MessageBox(0, "Invalid parameter list passed to the application", "Cut utility", MB_OK or MB_ICONWARNING);
   Exit;
  end;

  bmp := TBitmap.Create;
  try
   bmp.Width := r.Right - r.Left;
   bmp.Height := r.Bottom - r.Top;
   bmp.PixelFormat := OriginalBMP.PixelFormat;
   bmp.Canvas.CopyRect(bmp.Canvas.ClipRect, OriginalBMP.Canvas, r);
   bmp.SaveToFile(ChangeFileExt(ParamStr(1), "") + "_part" + IntToStr(idx - 1) + ".bmp");

   Inc(sc);
  finally
   bmp.Free;
  end;
 finally
  coords.Free;
 end
end;  

begin
 OriginalBMP := TBitmap.Create;
 if (ParamCount < 2) or not (FileExists(ParamStr(1))) then Exit;

 try
  OriginalBMP.LoadFromFile(ParamStr(1));
  for i := 2 to ParamCount do begin
   EvalParam(i);
  end;

  MessageBox(0, PChar(Format("Image "%s" was succesfully cut into %d pieces", [ParamStr(1), sc])), "Cut utility", MB_OK or MB_ICONINFORMATION);
 finally
  OriginalBMP.Free;
 end;
end.


Надеюсь пример поможет тебе разобраться.
Синтаксис командной строки такой:
*.bmp (d,d,d,d)*

Например, 1.bmp 0,0,20,20 0,0,20,100 0,20,100,100



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

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

Наверх




Память: 0.48 MB
Время: 0.041 c
15-1141921979
MuxauJl
2006-03-09 19:32
2006.04.02
hlp файлы


2-1142509639
Gentos
2006-03-16 14:47
2006.04.02
Delphi&amp;Html


4-1137331762
Volf_555
2006-01-15 16:29
2006.04.02
Как закрыть всплывающее меню в SystemTray когда оно теряет фокус?


4-1137242738
Volf_555
2006-01-14 15:45
2006.04.02
Как в ран-тайме добавить в попап-меню расширенное меню?


2-1142694708
beglec
2006-03-18 18:11
2006.04.02
Не совсем корректная работа с потоком