![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Алгоритм нарезания паззлов из картинки
wl © (2004-12-09 16:38:00)никому не попадалось? что-то поиском разучился пользоваться
dRake (2004-12-10 13:34:00) [1]Mihey_temporary © (09.12.04 22:12) [5]
Да N^2 ;)
Хотел поправить да правки нет ;)
Mihey_temporary (2004-12-09 22:12:00) [2]
> Берем картинку и нарезаем из нее N кусков -
Так ведь не N, а N^2.
wl (2004-12-09 22:00:00) [3]спасибо...
wl (2004-12-09 21:59:00) [4]спасибо...
ninja (2004-12-09 18:08:00) [5]дык пазлы вроде не кавадратами нарезаются, а красивыми рюшечками.. тогда нужно будет определить их форму, и в цикле их все посувать в массив (Форм кста несколько будет. Рекомендую посмотреть, как устроены пазлы (в оффлайне)). Копировать части изображения через XOR и AND-маски, ф-ция bitblt.
Вроде, всё.
dRake (2004-12-09 17:34:00) [6]Мда....
Берем картинку и нарезаем из нее N кусков -
VAR
Source : TBitmap;
Puzzle : array [1..N, 1..N] of TBitmap;
Инициализируем графику
PROCEDURE InitShit;
VAR
i, j : integer;
BEGIN;
Source := TBitmap.Create;
Source.LoadFromFile('Blablabla.bmp');
for i := 1 to N do
begin;
for j := 1 to N do
begin;
Puzzle[i,j] := TBitmap.Create;
Puzzle[i, j].Width := Round(Source.Width/N);
Puzzle[i, j].Height := Round(Source.Height/N);
end;
end;
END;
Нарезаем кртинку
PROCEDURE DoSomeStuff;
VAR
i, j : integer;
BEGIN;
for i := 1 to N do
begin;
for j := 1 to N do
begin;
Puzzle[i, j].Canvas.CopyRect(
Rect(0, 0, Puzzle[i, j].Width, Puzzle[i, j].Height),
Source.Canvas,
Rect((i - 1)*Puzzle[i, j].Width,
(j - 1)*Puzzle[i, j].Height,
Puzzle[i, j].Width,
Puzzle[i, j].Height));
end;
end;
END;
Все, получаешь двухмерный массив Puzzle c кусками твоей картинки