![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как разрезать рисунок? [D6, D7, WinXP]
Volf_555 © (2005-10-29 22:25:00)Есть много рисунков одинакого размера (ширина, высота), надо каждый рисунок разрезать на 5 равных частей и каждую часть сохранить в файлы. Как это осуществить?
Zeqfreed (2005-10-30 00:46:00) [1]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
Volf_555 (2005-10-29 23:33:00) [2]Не раздуплюсь как этим воспользоваться...
TCanvas.CopyRect(const Dest:TRect; Canvas:TCanvas;const Source:TRect);
На форме есть Image1-6
В Image1 загружается главный рисунок, в остальные Image_ - результат обработки.
Что мне писать в качестве Dest, Canvas и Source? (Используя ширину и длину копируемого участка)
Zeqfreed (2005-10-29 22:53:00) [3]Volf_555 (29.10.05 22:45) [2]
См. BitBlt, TCanvas.CopyRect
Volf_555 (2005-10-29 22:45:00) [4]В рисунке 5 прямоугольных одинаковых областей.
Desdechado (2005-10-29 22:31:00) [5]Равных по какому признаку? По площади? Или по форме? Прямоугольники или еще что?