Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Сб окт 21, 2017 6:42 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 12 сообщений ] 
Автор Сообщение
 Заголовок сообщения: SysFn35:GetPixel
СообщениеДобавлено: Пт окт 14, 2016 9:23 pm 
Не в сети

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


Вернуться к началу
 Заголовок сообщения: Re: SysFn35:GetPixel
СообщениеДобавлено: Пт ноя 04, 2016 5:13 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1076
Это прямо какое-то извращение из-за одного пикселя :)
Код:
{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;         


Вернуться к началу
 Заголовок сообщения: Re: SysFn35:GetPixel
СообщениеДобавлено: Пт ноя 11, 2016 9:30 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1599
Не используйте функцию 35. Тем более что вам вряд ли нужен только один пиксель. Используйте функцию 36.

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


Вернуться к началу
 Заголовок сообщения: Re: SysFn35:GetPixel
СообщениеДобавлено: Пт ноя 11, 2016 10:36 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1076
CleverMouse писал(а):
вам вряд ли нужен только один пиксель
Иногда бывает нужен.
viewtopic.php?f=42&t=2650
viewtopic.php?f=38&t=1450


Вернуться к началу
 Заголовок сообщения: Re: SysFn35:GetPixel
СообщениеДобавлено: Пт ноя 11, 2016 11:07 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1190
Там, где нужен один пиксель, не нужна производительность. Там, где нужен участок, попиксельная работа отпадает.


Вернуться к началу
 Заголовок сообщения: Re: SysFn35:GetPixel
СообщениеДобавлено: Сб ноя 12, 2016 12:30 am 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пт авг 14, 2009 1:46 am
Сообщения: 1291
0CodErr
Если критикуешь какое-нибудь извращение - тогда предложи что-нибудь получше.

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

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

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


Вернуться к началу
 Заголовок сообщения: Re: SysFn35:GetPixel
СообщениеДобавлено: Чт ноя 17, 2016 7:30 pm 
Не в сети
Kernel Developer
Аватара пользователя

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

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


Вернуться к началу
 Заголовок сообщения: Re: SysFn35:GetPixel
СообщениеДобавлено: Пт ноя 18, 2016 12:13 am 
Не в сети

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


Вернуться к началу
 Заголовок сообщения: Re: SysFn35:GetPixel
СообщениеДобавлено: Пт ноя 18, 2016 12:37 am 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4221
Оффтопик: Забавно, когда человек написал за 6 лет всего 4 комментария и при этом знает кто такой Turjanmaa и как реализована GETPIXEL.

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


Вернуться к началу
 Заголовок сообщения: Re: SysFn35:GetPixel
СообщениеДобавлено: Пт ноя 18, 2016 12:54 am 
Не в сети

Зарегистрирован: Вс авг 29, 2010 2:00 pm
Сообщения: 5
Leency
не GETPIXEL, a syscall_getpixel.


Вернуться к началу
 Заголовок сообщения: Re: SysFn35:GetPixel
СообщениеДобавлено: Пт ноя 18, 2016 3:49 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1076
CleverMouse писал(а):
и даже для одного пикселя можно использовать функцию 36.
Ну это в принципе тоже вариант.


Вернуться к началу
 Заголовок сообщения: Re: SysFn35:GetPixel
СообщениеДобавлено: Пт ноя 18, 2016 11:06 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пт авг 14, 2009 1:46 am
Сообщения: 1291
CleverMouse
Миледи, Ваша грубость не делает этот мир лучше.

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

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


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 12 сообщений ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB