Вверх ↑
Ответов: 1291
Рейтинг: 47
#1: 2013-08-28 13:49:22 ЛС | профиль | цитата
3042, может вы поможете? Ведь у вас как-то запустилось..
------------ Дoбавленo в 13.34:
Вот в этом коде из KolJanFX.pas видно что ошибка возникает после использования указателя массива P1:

Buf[0,0]:=P1[CX*3];

Сообщение ShowMessage не проходит после этой строки.
Удалось заставить работать только эффект Flip.

Что не так с использованием PByteArray? Есть какая-то хиасмовская специфика?

procedure SplitBlur(var Clip: PBitmap; Amount: integer);
var P0,P1,P2: PByteArray;
CX,X,Y: integer;
Buf: array [0..3,0..2] of byte;
begin
if Amount=0 then Exit;
for Y:=0 to pred(Clip.Height) do
begin
//ShowMessage('SplitBlur'+Int2Str(pred(Clip.Height)));
P0:=Clip.ScanLine[Y];
if Y-Amount<0 then P1:=Clip.ScanLine[Y] else P1:=Clip.ScanLine[Y-Amount]; {Y-Amount>0}
if Y+Amount<Clip.Height then P2:=Clip.ScanLine[Y+Amount] else P2:=Clip.ScanLine[Clip.Height-Y]; {Y+Amount>=Height}
for X:=0 to pred(Clip.Width) do
begin
// ShowMessage('SplitBlur2'+Int2Str(pred(Clip.Width)));
if X-Amount<0 then CX:=X else CX:=X-Amount; {X-Amount>0}
ShowMessage('SplitBlur2 '+Int2Str(pred(Clip.Width)));
Buf[0,0]:=P1[CX*3];
ShowMessage('SplitBlur3 '+Int2Str(pred(Clip.Width)));
Buf[0,1]:=P1[CX*3+1];
Buf[0,2]:=P1[CX*3+2];
Buf[1,0]:=P2[CX*3];
Buf[1,1]:=P2[CX*3+1];
Buf[1,2]:=P2[CX*3+2];
if X+Amount<Clip.Width then CX:=X+Amount else CX:=Clip.Width-X; {X+Amount>=Width}
Buf[2,0]:=P1[CX*3];
Buf[2,1]:=P1[CX*3+1];
Buf[2,2]:=P1[CX*3+2];
Buf[3,0]:=P2[CX*3];
Buf[3,1]:=P2[CX*3+1];
Buf[3,2]:=P2[CX*3+2];
P0[X*3]:=(Buf[0,0]+Buf[1,0]+Buf[2,0]+Buf[3,0]) shr 2;
P0[X*3+1]:=(Buf[0,1]+Buf[1,1]+Buf[2,1]+Buf[3,1]) shr 2;
P0[X*3+2]:=(Buf[0,2]+Buf[1,2]+Buf[2,2]+Buf[3,2]) shr 2;
ShowMessage('SplitBlur3'+Int2Str(pred(Clip.Width)));
end;
end;
end;
------------ Дoбавленo в 13.49:
Похоже форум мертв..
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0