Форум: "Media";
Текущий архив: 2006.04.02;
Скачать: [xml.tar.bz2];
ВнизКак разрезать рисунок? Найти похожие ветки
← →
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 вся ветка
Форум: "Media";
Текущий архив: 2006.04.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.031 c