Главная страница
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.031 c
10-1115904156
Иван Шихалев
2005-05-12 17:22
2006.04.02
Что почитать по CORBA?


15-1142276599
Ломброзо
2006-03-13 22:03
2006.04.02
Как получить список сервисов...


4-1136897318
Vadim M
2006-01-10 15:48
2006.04.02
Сервис на API


15-1141992054
ANB
2006-03-10 15:00
2006.04.02
Просьба к модераторам


2-1142421848
Пакизат
2006-03-15 14:24
2006.04.02
Помогите!