Главная страница
    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.46 MB
Время: 0.033 c
1-1140966751
Конопелька
2006-02-26 18:12
2006.04.02
Выделение области для перетаскивания формы.


2-1142841790
RomanH
2006-03-20 11:03
2006.04.02
Ввод в MaskEdit


2-1142896896
jenya_rus
2006-03-21 02:21
2006.04.02
Экспорт имен и расширений файлов в listview.???


2-1142931772
KyRo
2006-03-21 12:02
2006.04.02
Почему функция возвращает фалсе


1-1141226867
tzarizm
2006-03-01 18:27
2006.04.02
Прием MMS с GSM-терминала или с любого сотового телефона





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский