Obraz z kamery i paski

0

Witam,
Jak w temacie : Odczytuje z kamery obraz :

 
...
SendMessage(FCapHandle,WM_CAP_GET_FRAME, 0, 0);
    SendMessage(FCapHandle, WM_CAP_COPY, 0, 0);

    if Clipboard.HasFormat(CF_Bitmap) then
        tmp_bmp1.LoadFromClipboardFormat(CF_BITMAP, ClipBoard.GetAsHandle( CF_BITMAP), 0);
...

Wrzucam na dwa komponenty image bitmapy (na pierwszy image idzie bitmapa zawierajaca tylko R, a na drugi image idzie bitmapa zawierajaca tylko GB z calego RGB) :

...
 for y := od_ilu to do_ilu Do
       begin
          linia1 := tmp_bmp1.ScanLine[y];

          x := 1;
          i := 1;
          while (x < (tmp_bmp1.Width*3)) Do
          begin
                form1.Image1.Canvas.Pixels[i,y]:=RGB(linia1[x+2],0,0);
                form1.Image2.Canvas.Pixels[i,y]:=RGB(0,linia1[x+1],linia1[x]);

            Inc(i);
            Inc(x,3);
          end;
        end;

Wszystko jest ładnie i pięknie tylko że mam takie pionowe rownolegle paski znacznie ciemniejsze od reszty... Jakieś sugestie co może być przyczyną?

0

Sprawdz codeki, wina moze tez lezec po stronie konwersji ... ciezko wyczuc

0

Co dziwne jak zbieram po pixelu nie scanline to ten problem nie wystepuje...

0

a czy te zdjecia z paskami to zawsze masz, moze swiatlo ktore uzywasz jest zbyt intensywne i do tego miga?np. jak wysokoprezna lampa sodowa

0

Ze światłem nie ma to raczej nic wspólnego...
user image

0

czy x nie powinno byc liczone od 0?
przed petla while masz x:=1;

0

dla 24 bitmapy
for y := 0 to wysokosc-1 Do
begin
linia1 := tmp_bmp1.ScanLine[y];

for x:=0 to szerokosc-1 do
begin
form1.Image1.Canvas.Pixels[i,y]:=RGB(linia1[x3+2],linia1[x3+1],linia1[x*3+0]);
end;
end;

prawidlowo powinno byc tak

tyle ze x*3 w zaleznosci od ilosci bitow dla 24 jest to 3 dla 32 jest to 4

0

prawidlowo powinno byc tak

Połowicznie, bo jeszcze należałoby pozbyć się .Pixels[] a operować wyłącznie na Scanline.

0

Mimo że w kodzie ustawiłem format bitmapy na 24bity

tmp_bmp1.PixelFormat := pf24bit;
to program ustawiał 32bity i wymagało to zwiększania licznika o 4, i był rzeczywiście błąd z tym x'em rownym 1...

Dzięki za pomoc. Jestem jeszcze ciekaw co znajduje sie na 4 pozycji... Wychodzi na to ze format tablicy to teoretycznie BGRX. Gdyby ktoś wiedział co tam jest pod tym X i jak to wykorzystać to fajnie byłoby to wiedzieć i zostawić tutaj ślad dla potomności :-)

0

BGRA

albo ABGR

nie pamietam ale chyba to pierwsze
czyli blue green red alpha

czyli tamto to stopien przezroczystosci obrazka

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