Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1142777987
Der Nechk@ssoff
2006-03-19 17:19
2006.04.02
Открытие файла в MediaPlayer


2-1142794745
_Sa_nya
2006-03-19 21:59
2006.04.02
WIN API


2-1142936552
tytus
2006-03-21 13:22
2006.04.02
Помогите с созданием компонента


1-1140940938
Mishenka
2006-02-26 11:02
2006.04.02
Автоматическое изменение размеров картинки в TImage


2-1142388884
NightSkif13
2006-03-15 05:14
2006.04.02
TreeView





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский