![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сдвиг изображения [WinXP]
Виталя © (2008-06-18 15:37:00)Товарищи программисты,помогите пожалуйста реализовать фильтр offset фотошопа в делфи
Омлет (2008-06-18 20:11:00) [1]
type
TMoveStyle = (msAll, msBack);
procedure MoveBitmap(Src, Dest: TBitmap; Hor, Ver: Integer; Style: TMoveStyle; BackColor: TColor);
var x, y: Integer;
begin
if (Hor = 0) and (Ver = 0) then Exit;
Dest.Width := Src.Width;
Dest.Height := Src.Height;
Dest.PixelFormat := Src.PixelFormat;
Dest.Transparent := False;
if Style = msBack then
with Dest.Canvas do begin
Brush.Style := bsSolid;
Brush.Color := BackColor;
FillRect(Rect(0, 0, Dest.Width, Dest.Height));
end;
if Style = msAll then begin
if Hor > 0 then x := Hor - Dest.Width
else x := Dest.Width + Hor;
if Ver > 0 then y := Ver - Dest.Height
else y := Dest.Height + Ver;
if (x <> 0) and (y <> 0) then Dest.Canvas.Draw(x, y, Src);
Dest.Canvas.Draw(Hor, y, Src);
Dest.Canvas.Draw(x, Ver, Src);
end;
Dest.Canvas.Draw(Hor, Ver, Src);
end;
Src - исходное изображение
Dest - результат
Hor, Ver - число пикселей, на которое будет смещение по горизонтали и вертикали
Style - тип фона: msBack - фон закрашивается цветом BackColor, msAll - смещение происходит с перелезанием конца в начало и низа вверх, либо наоборот.
Выдернуто из старющего проекта, поэтому немного нелогично :)
Омлет (2008-06-18 19:56:00) [2]Фильтр Offset (Сдвиг) - сдвигает выделенные области изображения по горизонтали или вертикали на точно заданное число пикселей.
Это самое простое, что можно запрограммировать в фильтрах для граф.редактора ))
Просто копировать нужную часть рисунка с помощью BitBlt или Canvas.CopyRect со смещением. Не вижу тут никаких сложностей в плане алгоритма.
MBo (2008-06-18 17:01:00) [3]что делает это фильтр (фотошопа не видел)
MBo (2008-06-18 17:01:00) [4]что делает это фильтр?
(фотошопа не видел)