Функция 25 - вывод изображения на слой фона

Kernel-side graphics support
  • Я за отдельную функцию. Хотя я ламо и шарю в этом мало. Ммм... тоесть теперь можно будет удобно отображать нечто вроде conkey из Линукса?
    Из хаоса в космос
  • Не совсем то. По большому счету функция предназначена для Icon, вывод же другой информации по одним и тем же координатам будет портить изображение обоих картинок. К том уже надо учитывать, что когда фон перерисовывается вся выведенная картинка пропадает. Поскольку это не окно, а фантомный отпечаток по сути, то его надо по мере необходимости перерисовывать. Собственно сейчас думаю над тем как эффективно сообщить о необходимости перерисовки, чтобы перерисовывать только нужный кусок изображения (в случае с Icon, когда много иконок)
  • от 1 до FF это коэффициент прозрачности, цвет иконки соединяют с цветом фона
    вот тебе функция, рисует прозрачную иконку в формате
    dw ширина
    dw высота
    dw длинна строки
    data массив с изображением иконки

    Code: Select all

    i dd 0
    j dd 0
    l dd 0
                                         в esi адрес иконки
    ico_screen: pushad
                movzx eax,word[def3]    ;y координата на буфере
                movzx ecx,word[def10]   ;там ширины строки видео буфера
                mov [l],ecx
                mul ecx
                movzx ecx,word[def2]    ;x координата на буфере
                shl ecx,2
                add eax,ecx
    
                mov     edi,[def7]      ;там адрес экранного буфера
                add     edi,eax 
    
                mov dx,[esi]                      ; Здесь ширина иконки
                add esi,4
                xor eax,eax
                lodsw                             ; Здесь длинна строки иконки
    
                sub [l],eax
                mov [i],dx
                mov [j],dx
                jmp .2
            .1: add edi,[l] 
                mov [j],dx
                dec [i]
                jz .3
    
            .2: mov ebx,[esi]
                shr ebx,24
    
                cmp bl,0                  ;если 0, то точку не рисуем
                jnz .4
                add esi,4
                add edi,3
                inc edi
                jmp .5
    
                cmp bl,255                ;если 255, то прозрачности не надо
                jnz .4
                lodsd
                mov [edi],eax
                add edi,3
                mov al,[def13] ;Z
                mov [edi],al
                inc edi
                jmp .5
                 
            .4: mov bh,255
                sub bh,bl
                
                xor ax,ax
                lodsb
                mul bl
                shr ax,8
                mov ch,al
                xor ax,ax
                mov al,[edi]
                mul bh
                shr ax,8
                add al,ch
                stosb
                
                xor ax,ax
                lodsb
                mul bl
                shr ax,8
                mov ch,al
                xor ax,ax
                mov al,[edi]
                mul bh
                shr ax,8
                add al,ch
                stosb
    
                xor ax,ax
                lodsb
                mul bl
                shr ax,8
                mov ch,al
                xor ax,ax
                mov al,[edi]
                mul bh
                shr ax,8
                add al,ch
                stosb
                inc esi
    
                mov al,[def13] ;Z
                stosb
                
            .5: dec [j]
                jz .1
                jmp .2
            .3: popad
                ret
    В IcoFX можно сохранить любую иконку как bmp только 32битном формате и перевернуть её.
    Потом добавить к себе например так
    ico6 dw 48
    dw 48
    dw 48*4
    file '6.bmp':54
    потом в проге

    mov esi,ico6
    call ico_screen
    Last edited by Стас on Mon Mar 26, 2012 6:02 pm, edited 2 times in total.
  • Да-да. Ты охуенно крут! :lol:
    Плевать на все MUL и DIV.

    И еще я конечно не разбираюсь в колбасных обрезках форматах графических данных.
  • SVN r. 2509 Function 25 - put image area on the background layer

    Код нагло позаимствован из ф.36, которую в свою очередь делал я же, а все остальные матами и пиздюлями наставляли меня на путь истинный. :lol: Давно это было.
    Описание читать в документационной части исходников ядра.
  • Код написал я сам.
  • Who is online

    Users browsing this forum: No registered users and 3 guests