![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обрезание (нафиг)
KiberKot © (2006-04-21 22:27:00)Вот мучаюсь с обрезанием картинок.
Объект, частично попадая за пределы экрана, должен это чатично
обрезать и вывестись без него. Для этого я ввел переменную, которая
наченает увеличиваться, после того, как координаты объекта стали
меньше нуля. Потом в процедуре я обрезаю от картинки кусок,
равный значению этой переменной и вывожу все остальное.
Так же и в другую сторону, т.е. если координаты стали больше предела
экраны.
Правильно ли я это, и вообще, можноли обойтись без обрезания
(а то уже припаило)
Don Nikola (2006-04-22 06:23:00) [21]Я так делал. Много и страшно, но работает. Может можно проще, не знаю.
function PrepareClipRects(Dest: TImage; DestX,DestY,DestWidth,DestHeight: integer; Src:TImage;SrcX,SrcY,SrcWidth,SrcHeight: integer; var DestRect,SrcRect: TRect): boolean;
begin
Result:=false;
if (Dest=nil)or(Src=nil) then Exit;
if DestX<0 then
begin
DestWidth:=DestWidth+DestX;
SrcX:=SrcX-DestX;
DestX:=0;
end;
if DestY<0 then
begin
DestHeight:=DestHeight+DestY;
SrcY:=SrcY-DestY;
DestY:=0;
end;
if SrcX<0 then
begin
SrcWidth:=SrcWidth+SrcX;
DestX:=DestX-SrcX;
SrcX:=0;
end;
if SrcY<0 then
begin
SrcHeight:=SrcHeight+SrcY;
DestY:=DestY-SrcY;
SrcY:=0;
end;
if (SrcX+SrcWidth)>integer(Src.Width) then SrcWidth:=integer(Src.Width)-SrcX;
if (SrcY+SrcHeight)>integer(Src.Height) then SrcHeight:=integer(Src.Height)-SrcY;
if (DestX+DestWidth)>integer(Dest.Width) then DestWidth:=integer(Dest.Width)-DestX;
if (DestY+DestHeight)>integer(Dest.Height) then DestHeight:=integer(Dest.Height)-DestY;
if SrcWidth>DestWidth then SrcWidth:=DestWidth;
if SrcHeight>DestHeight then SrcHeight:=DestHeight;
if (SrcWidth<=0)or(SrcHeight<=0) then Exit;
DestRect.Left:=DestX;
DestRect.Top:=DestY;
DestRect.Right:=DestX+SrcWidth;
DestRect.Bottom:=DestY+SrcHeight;
SrcRect.Left:=SrcX;
SrcRect.Top:=SrcY;
SrcRect.Right:=SrcX+SrcWidth;
SrcRect.Bottom:=SrcY+SrcHeight;
Result:=true;
end;
KiberKot (2006-04-22 02:11:00) [22]а в ОГЛ само обризает , или там бобще не обрезается ?
KiberKot (2006-04-22 02:09:00) [23]
> Небесные чакры раскрылись, и что-то мне подсказывает, DirectDraw'ом
> тут пованивает...
попахивает
XProger (2006-04-22 01:55:00) [24]Небесные чакры раскрылись, и что-то мне подсказывает, DirectDraw'ом тут пованивает...
KiberKot (2006-04-22 00:05:00) [25]
> Cash ©
Девайсто обрезает, но что если фигура у меня на пол экрана (земля), он ее
все скрывает
Cash (2006-04-21 23:55:00) [26]KiberKot © (21.04.06 22:27):
Батенька, это дело хорошо только у равимов получается! :-D
> Правильно ли я это, и вообще, можноли обойтись без обрезания
По моему маленько нет. Ты не по частям обрезай! А просто не отрисовывай
те фигурки, которые всеми сфоими частями за пределами экрана. Обрежит
за тебя девайс, у него это должно быстрее получаться.
> ошибку выкидывает
Какую ошибку??? 8|
KiberKot (2006-04-21 23:30:00) [27]нельзя вроде без обрезания, ошибку выкидывает
Mortem (2006-04-21 22:29:00) [28]Зачем обрезаешь? Попробуй без обрезания.