Problem z scanline.

Odpowiedz Nowy wątek
Mariusz M
2006-12-07 18:22
Mariusz M
0

Witam ,
Od kilku dni mam problem , nigdzie nie potrafię znalezc odpowiedzi.
Robie programik który za pomącą dspacka zczytuje obraz z kamery , wyszukuje pixela o danym kolorze i jesli znadzie to cos robi. Mam zamiar zrobic strzelnice z laserem i projektorem.
Ale program bardzo często wywala mi się w jednym miejscu.
Podaje kod , mam nadzieje ze coś wymyślicie , ponieważ ja jestem początkujacy.

var
x,y : integer;
color :TColor;
P : PByteArray;
r,g,c : byte;
begin
color:=image1.Picture.Bitmap.Canvas.Pixels[20,20]; <--- pobiera mi kolor ktorego ma wyszukac

r:=getRvalue(color);
g:=getGvalue(color);
c:=getBvalue(color);

for y:=0 to image.Picture.height-1 do
begin
P:=image.Picture.Bitmap.ScanLine[y];
for x:=0 to image.Width-1 do
if (g = P[X3+1])
and (R = P[X
3+2]) or (R-1 = P[X3+2])
and (c = P[X
3])
then
imagejpeg.Canvas.Ellipse(x,y,x+5,y+5);

Po chwili zawsze mi się zawiesza , nawet jak zapisze ze
image.Picture.Bitmap.PixelFormat:=pf24bit; nic sie nie zmienia.

Pozostało 580 znaków

dj
2006-12-07 18:56
dj

Rejestracja: 15 lat temu

Ostatnio: 9 lat temu

0
for y:=0 to image.Picture.height-1 do begin
  P:= image.Picture.Bitmap.ScanLine[y];
  for x:=0 to image.Picture.Width-1 do
    if (g = P[x].rgbtGreen)and(R = P[X].rgbtRed) or (R - 1 = P[X].rgbtRed)and (c = P[x].rgbtBlue) then
       imagejpeg.Canvas.Ellipse(x, y, x + 5,y + 5);
end;
// ponadto
TBGRArray = array of TRGBTriple;
P: TBGRArray;

Great spirits have always encountered violent opposition from mediocre minds.

Pozostało 580 znaków

Mariusz M
2006-12-07 19:31
Mariusz M
0

Dalej to samo , przy dużej ilosci pixeli wywala mi program :/

Pozostało 580 znaków

dj
2006-12-07 19:42
dj

Rejestracja: 15 lat temu

Ostatnio: 9 lat temu

0

Ok już wiem co jest nie tak. Jak zwykle przez ...

  for y:= 0 to image1.Picture.Bitmap.Height - 1 do begin
    P:= image1.Picture.Bitmap.ScanLine[y];
    for x:= 0 to image1.Picture.Bitmap.Width - 1 do
      if (g = TBGRArray(P)[x].rgbtGreen)and(R = TBGRArray(P)[X].rgbtRed)or(R - 1 = TBGRArray(P)[X].rgbtRed)and(c = TBGRArray(P)[x].rgbtBlue) then begin
         imagejpeg.Canvas.Ellipse(x, y, x + 5, y + 5);
      end;
  end;

// ponadto 
  P: PRGBTriple;

type
  TBGRArray = array of TRGBTriple;

i teraz powinno działać

Great spirits have always encountered violent opposition from mediocre minds.

Pozostało 580 znaków

Mariusz M
2006-12-07 21:26
Mariusz M
0

Dalej to samo , czasem dziala 20s , czasem 5s. i zawsze to samo .
Wyskakuje cos w tym stylu.
"EAccessViolation with message 'Acces violation at address 0046541B in module .
Read of address 01959FA."

Pozostało 580 znaków

Mariusz M
2006-12-07 21:29
Mariusz M
0

Dalej to samo , czasem dziala 20s , czasem 5s. i zawsze to samo .
Wyskakuje cos w tym stylu.
"EAccessViolation with message 'Acces violation at address 0046541B in module .
Read of address 01959FA."

Pozostało 580 znaków

dj
2006-12-07 21:42
dj

Rejestracja: 15 lat temu

Ostatnio: 9 lat temu

0

Możesz mi przesłać ten projekcik to się rozejrze po kodzie i może da się co stwierdzić. Tak bez kodu nie da sie nic sstwierdzić


Great spirits have always encountered violent opposition from mediocre minds.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0