[delphi] obraz z kamery na TImage ;]

0

Cześć
Mam kartę telewizyjną AVerMedia na PCMCIA.
Można też "wpuścić" sygnał np. z kamery...
I oto moje pytanie, jak zrobić aby obraz wyświetlał się na np. TImage?
Aby pobierać bezpośrednio z urządzenia obraz wpuszczony z kamery?
Pewnie łatwiej było by zrobić z kamerki internetowej ale ja potrzebuje dobrą jakość, do dalszych eksperymentów. I żeby dało się później wykonać operacje
canvas na obrazku aby pobrać jakiś pixel z obrazu kamery :)
Czy może ktoś zrobił takie cos ;P
Prosze o pomoc

0

zainteresuj sie DSPack

0
lofix napisał(a)

zainteresuj sie DSPack

Dzięki że chodź trochę nadziei mi przywróciłeś, bo już myślałem, że to nie możliwe :)
W komponencie TFilter znalazłem takie cuś:
user image
Sądzę że ten komponent się przyda...
Lecz dalej nie mam pojęcia co z tym zrobić ;(

0

Poprzeglądaj dema DSPacka

0

Dobra dzięki za pomoc...
Tylko jeszcze jedno.... nie mogę na komponęcie TVideoWindow nie mogę zrobić operacji canvas.pixels.
Jak to zrobić?

0
FT napisał(a)

Tylko jeszcze jedno.... nie mogę na komponęcie TVideoWindow nie mogę zrobić operacji canvas.pixels.

Mozesz. Tylko wtedy nie odwolujesz sie do obrazu, ale do warstwy polozonej nad nim. Mozesz uzyc komponentu do robienia screenów z filmu (coś z grabber w nazwie) i pobierać nim bitmapę, a potem na bitmapie canvas.pixels. Tylko ostrzegam, że to będzie dość powolne :).

0
thenkles napisał(a)
FT napisał(a)

Tylko jeszcze jedno.... nie mogę na komponęcie TVideoWindow nie mogę zrobić operacji canvas.pixels.

Mozesz. Tylko wtedy nie odwolujesz sie do obrazu, ale do warstwy polozonej nad nim. Mozesz uzyc komponentu do robienia screenów z filmu (coś z grabber w nazwie) i pobierać nim bitmapę, a potem na bitmapie canvas.pixels. Tylko ostrzegam, że to będzie dość powolne :).

Znalazłem nawet przykład...
Zrobiłem osobny program i na komponencie TVideoWindow wyświetla mi się pięknie obraz, ale jak dodam ten TSampleGrabber i ustawie właściwość FilterGraph na FilterGraph1 a w zdarzeniu OnBuffer:

  Image.Picture.Bitmap.Canvas.Lock;
  try
    SampleGrabber.GetBitmap(Image.Picture.Bitmap, pBuffer, BufferLen);
  finally
    Image.Picture.Bitmap.Canvas.UnLock;
  end;

To po prostu na imagu nic mi sie nie wyświetla...

0
  1. W SampleGrabber Zmień FilterGraph na twój FilterGraph
  2. Poibieranie Bitmapy:
SampleGrabber.GetBitmap(JvThumbImage1.Picture.Bitmap);
  1. Ważne! - Po rozpoczęciu odtwarzania danych z karty(po wybraniu Device) Napisz
with FilterGraph as ICaptureGraphBuilder2 do
    RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter as IBaseFilter, SampleGrabber as IBaseFilter, VideoWindow as IbaseFilter);

PS: Polecam przykład PlayVideoCap z DSPack.

0
oneghost napisał(a)
  1. W SampleGrabber Zmień FilterGraph na twój FilterGraph
  2. Poibieranie Bitmapy:
SampleGrabber.GetBitmap(JvThumbImage1.Picture.Bitmap);
  1. Ważne! - Po rozpoczęciu odtwarzania danych z karty(po wybraniu Device) Napisz
with FilterGraph as ICaptureGraphBuilder2 do
    RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter as IBaseFilter, SampleGrabber as IBaseFilter, VideoWindow as IbaseFilter);

PS: Polecam przykład PlayVideoCap z DSPack.

te 2 linijki kodu za dużo zrobiły:

[Error] main.pas(77): Operator not applicable to this operand type
[Error] main.pas(78): Undeclared identifier: 'RenderStream'
[Error] main.pas(78): Operator not applicable to this operand type
[Error] main.pas(78): Operator not applicable to this operand type
[Error] main.pas(78): Operator not applicable to this operand type

aż miło popatrzeć na błędy :)
A coś źle robie??

0

Popatrz na przykład PlayVideoCap. Tam masz to dokładniej pokazane.

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