Board.KolibriOS.org

Official KolibriOS board
It is currently Tue Sep 17, 2019 10:35 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 12 posts ] 
Author Message
 Post subject: SysFn35:GetPixel
PostPosted: Fri Oct 14, 2016 9:23 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Ghost wrote:
Наткнулся на 35 (GetPixel) - подумал, может её переделать? Сейчас приложение сначала узнаёт ширину экрана, перемножает её на x.coord потом ядро делает обратную работу.
Parameters:
* eax = 35
* ebx = y*xsize+x, where
* (x,y) = coordinates of a pixel (beginning from 0)
* xsize = horizontal screen size
Может и действительно переделать?


Top
   
 Post subject: Re: SysFn35:GetPixel
PostPosted: Fri Nov 04, 2016 5:13 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Это прямо какое-то извращение из-за одного пикселя :)
Code:
{35}      Function  GetPixel(X, Y: Integer): Dword; StdCall;
          Asm
                  push   ebx
          // at first need to know Screen.Width
                  mov    eax, 61
                  mov    ebx, 1
                  int    64
          // at now eax = (Width << 16) | Height       
          // need to make ebx = Y * Width + X   
                  shr    eax, 16
                  mul    Y
                  add    eax, X
                  mov    ebx, eax               
          // and now GetPixel
                  mov    eax, 35
                  int    64           
                  pop    ebx
          End;         


Top
   
 Post subject: Re: SysFn35:GetPixel
PostPosted: Fri Nov 11, 2016 9:30 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1620
Не используйте функцию 35. Тем более что вам вряд ли нужен только один пиксель. Используйте функцию 36.

_________________
Сделаем мир лучше!


Top
   
 Post subject: Re: SysFn35:GetPixel
PostPosted: Fri Nov 11, 2016 10:36 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
CleverMouse wrote:
вам вряд ли нужен только один пиксель
Иногда бывает нужен.
viewtopic.php?f=42&t=2650
viewtopic.php?f=38&t=1450


Top
   
 Post subject: Re: SysFn35:GetPixel
PostPosted: Fri Nov 11, 2016 11:07 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Там, где нужен один пиксель, не нужна производительность. Там, где нужен участок, попиксельная работа отпадает.


Top
   
 Post subject: Re: SysFn35:GetPixel
PostPosted: Sat Nov 12, 2016 12:30 am 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1342
0CodErr
Если критикуешь какое-нибудь извращение - тогда предложи что-нибудь получше.

В растровой графике все пиксели лежат в массиве шириной Width и высотой Height.
Точка с координатами (X,Y) определяется элементом этого массива с номером (Y*Width+X), и никак иначе.

Ну если у твоего монитора фиксированное разрешение 1024х768, тогда умножение+сложение можешь соптимизировать битовым сдвигом с OR-маской по X-координате.
Так будет гораздо быстрее, но учти что
- это будет работать только на твоем компьютере, и
- в ядре десятки подобных растрово-пиксельных компутаций, вся оконная система на них построена.

_________________
Узкий специалист подобен флюсу: полнота его - односторонняя.
Козьма Прутков


Top
   
 Post subject: Re: SysFn35:GetPixel
PostPosted: Thu Nov 17, 2016 7:30 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1620
art_zh, а ты на функцию syscall_getpixel посмотрел перед своим постом? А в инструкцию div там тебя носом ткнуть?
0CodErr, Pathoswithin: и даже для одного пикселя можно использовать функцию 36.

_________________
Сделаем мир лучше!


Top
   
 Post subject: Re: SysFn35:GetPixel
PostPosted: Fri Nov 18, 2016 12:13 am 
Offline

Joined: Sun Aug 29, 2010 2:00 pm
Posts: 5
CleverMouse
Функция 35 изначально была хорошо задумана, чтото такое нужно для векторной графики и анимашек
(например стрелочные часы, надо запомнить старые пикселы под линией прежде чем её рисовать).
А параметры функции оптимизированы чтобы ядро разгрузить и в программах можно упростить код.
А потом наверно у когото на EGA-мониторе она не работала и Mr Turjanmaa замкнул всё на GETPIXEL через div :lol:
Но это не значит что она совсем лишняя и нельзя её доделать.


Top
   
 Post subject: Re: SysFn35:GetPixel
PostPosted: Fri Nov 18, 2016 12:37 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5061
Offtopic: Забавно, когда человек написал за 6 лет всего 4 комментария и при этом знает кто такой Turjanmaa и как реализована GETPIXEL.

_________________
Через тернии к звездам


Top
   
 Post subject: Re: SysFn35:GetPixel
PostPosted: Fri Nov 18, 2016 12:54 am 
Offline

Joined: Sun Aug 29, 2010 2:00 pm
Posts: 5
Leency
не GETPIXEL, a syscall_getpixel.


Top
   
 Post subject: Re: SysFn35:GetPixel
PostPosted: Fri Nov 18, 2016 3:49 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
CleverMouse wrote:
и даже для одного пикселя можно использовать функцию 36.
Ну это в принципе тоже вариант.


Top
   
 Post subject: Re: SysFn35:GetPixel
PostPosted: Fri Nov 18, 2016 11:06 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1342
CleverMouse
Миледи, Ваша грубость не делает этот мир лучше.

Leency
Имея недолгий опыт общения с Маратом и Ёгевом, Кирюха очень редко сюда заходит.
Но вообще-то в системе он разбирается неплохо.

_________________
Узкий специалист подобен флюсу: полнота его - односторонняя.
Козьма Прутков


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 12 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited