В общем делаю чёта типа AlphaBlend т.е. тожа самое но + ещё некоторые опции проскальзвать будут это в будущем. эт кусок рутинного кода Код (Text): mov DL, byte ptr [ESI][3] ; 0 - RED, 1- GREEN, 2- BLUE, 3- ALPHA movzx AX, DL mul byte ptr [ESI][0] push AX not DL movzx AX, DL mul byte ptr [EDI][0] pop BX add AX, BX div HALFWORD ; 0FFh mov byte ptr [EDI][0], AL работаю по формуле (a*s+(not a)*t)\0FFh ну есть ещё t + (s-t)*a\0FFh - только косяк с минусами при реализации, ну мне не нравится div .... ну чувствую есть ещё способ .... или иной метод ... а то готовая функция у меня в разы медленней виндовской стандартной даже простая пробежка по циклу больше времени занимает ((( а тут ведь ещё разные размеры иходной и целевой части ..... может кто сталкивался с подобными вещами?? пошарил по инету уже, ... ничего вразумительного ненашел (((( весь день голову ломал ... выдераеш из старшего байта значение а оно \ 256 ... +/- 1 разница с \255, меня уже на работе непонимают ....
хе, просто сказать .... когда диасемблил уже qdi32 .... так там потярялся ((( ща конечно ещё раз полезу, но помойму там уже основа более высокого уровня была....
С чего вдруг? Полез ковыряться - в msimg32.dll, откуда экспортируется AlphaBlend, на самом деле переходник на GdiAlphaBlend из gdi32.dll… Всё забавнее и забавнее…
ZEQ Я бы еще добавил мусорного К чему тут movzx и push\pop - для обфускации ?! )) Деление на 255 для чисел < 256^2 Код (Text): add ax,bx movzx eax,ax mov edx,1010101h ;=2^32/255 mul edx mov byte ptr [edi], dl ;edx = eax/255
ZEQ у мне не нравится div .... ну чувствую есть ещё способ .... или иной метод ... может есть смысл пренебречь небольшой ошибкой и делить на 100h (например: shr AX, 8 или mov AL, AH)?
Всем спасибо.... leo - вообще спасибо, отвечаю - я не оптимизировал ещё как надо, решил начать с острых моментов типа деления ... а возможно выполнять свой код в режиме ядра ..?