Народ, что вы всех сразу "в дебри" отсылаете? Вполне возможно это куда более простой случай !
Тут недавно уже похожая тема пробегала...
Быстрая отрисовкаСуть, если кратко, в том, что "попиксельно" несмотря на все ухищрения
медленно будет всегда .
Но есть способы достаточно быстро нарисовать именно то что нужно ...
Единственное исключение где ПРИХОДИТСЯ работать "попиксельно" обработка "живого видеопотока" в реальном времени или фильтрация произвольных изображений .
Глянь на мой проект
"Цифровая оптика" . и загляни в модуль
"UCanny.pas"(Хорош тем что ничего внешнего не нужно ) и посмотри как там фильтры устроены . (Возможно скорости хватит ... разумеется обработку нужно производить на "теневом битмапе", а на Timage кидать например через
BitBlt )
Для более сложных (в плане скоростной обработки) случаев например есть библиотека OpenCV ... ( в моем проекте OpenCV тоже используется но пока в качестве дополнительных и "экспериментальных функций " )
Зы
Простые логические операции умеет
BitBlt (хотя придется повозится с "подбором логики" , но если сработает то лучше способа найти трудно!
)
Зы Зы
Кстати в UCanny.pas есть вот что ...
- Код: Выделить всё
procedure Blend2(Const Src1,Src2,Dst: TBitmap; CT: Integer;Amount: extended);
var w,h,x,y:integer;
ps1,ps2,pd:pbytearray;
begin
w:=Src1.Width;
h:=Src1.Height;
for y:=0 to h-1 do begin
ps1:=Src1.ScanLine[y];
ps2:=Src2.ScanLine[y];
Dst.BeginUpdate; ;
pd:=Dst.ScanLine[y];
for x:=0 to w-1 do
If RGB(ps2[x*3+2],ps2[x*3+1],ps2[x*3])<>CT then
begin
If ABS(Amount-1)>=0.09 then begin
pd[x*3] :=round((1-Amount)*ps1[x*3]+Amount*ps2[x*3]);
pd[x*3+1]:=round((1-Amount)*ps1[x*3+1]+Amount*ps2[x*3+1]);
pd[x*3+2]:=round((1-Amount)*ps1[x*3+2]+Amount*ps2[x*3+2]);
end else
begin
Move(ps2[x*3], pd[x*3],3);
end
end else Move(ps1[x*3], pd[x*3],3);
Dst.EndUpdate;
end;
end;
Это именно "прозрачность" то есть "смешение" . но все очень легко упростит до смешения "по ключевому цвету"
При размере кадра 640х480х24 без видимых тормозов работает в "риал тайм" на достаточно чахлом ноте (+ там еще видео с камеры и модель в OpenGL ).