Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обрезание (нафиг)


Страницы:   1 2

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]

Зачем обрезаешь? Попробуй без обрезания.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо