SysFn35:GetPixel

Internal structure and you change requests/suggestions
  • Это прямо какое-то извращение из-за одного пикселя :)

    Code: Select all

    {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;          
  • Не используйте функцию 35. Тем более что вам вряд ли нужен только один пиксель. Используйте функцию 36.
    Сделаем мир лучше!
  • CleverMouse wrote:вам вряд ли нужен только один пиксель
    Иногда бывает нужен.
    viewtopic.php?f=42&t=2650
    viewtopic.php?f=38&t=1450
  • Там, где нужен один пиксель, не нужна производительность. Там, где нужен участок, попиксельная работа отпадает.
  • 0CodErr
    Если критикуешь какое-нибудь извращение - тогда предложи что-нибудь получше.

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

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

    Code: Select all

    ; В начале было Слово:
    B32:        mov     ax, os_stack       ; Selector for os
    [/size]
  • art_zh, а ты на функцию syscall_getpixel посмотрел перед своим постом? А в инструкцию div там тебя носом ткнуть?
    0CodErr, Pathoswithin: и даже для одного пикселя можно использовать функцию 36.
    Сделаем мир лучше!
  • CleverMouse
    Функция 35 изначально была хорошо задумана, чтото такое нужно для векторной графики и анимашек
    (например стрелочные часы, надо запомнить старые пикселы под линией прежде чем её рисовать).
    А параметры функции оптимизированы чтобы ядро разгрузить и в программах можно упростить код.
    А потом наверно у когото на EGA-мониторе она не работала и Mr Turjanmaa замкнул всё на GETPIXEL через div :lol:
    Но это не значит что она совсем лишняя и нельзя её доделать.
  • : Забавно, когда человек написал за 6 лет всего 4 комментария и при этом знает кто такой Turjanmaa и как реализована GETPIXEL.
    Из хаоса в космос
  • Leency
    не GETPIXEL, a syscall_getpixel.
  • CleverMouse wrote:и даже для одного пикселя можно использовать функцию 36.
    Ну это в принципе тоже вариант.
  • CleverMouse
    Миледи, Ваша грубость не делает этот мир лучше.

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

    Code: Select all

    ; В начале было Слово:
    B32:        mov     ax, os_stack       ; Selector for os
    [/size]
  • Who is online

    Users browsing this forum: No registered users and 3 guests