Форум: "Media";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];
ВнизКак перевести Panel.Canvas в Image.Canvas ? Найти похожие ветки
← →
palgen © (2005-08-24 07:24) [0]Такая проблема ... Видеопоток (а точнее картинки с частотой 10 к/сек.) отображается на Panel. В процессе работы мне необходимо сканировать эти картинки, используя Pixels[x,y], но у Panel такой возможности нет. У Image есть. Поэтому я хочу переносить поток с Panel.Canvas в Image.Canvas ... Подскажите как это сделать ... Есть ли другие варианты ?
← →
Antonn © (2005-08-24 07:30) [1]
> используя Pixels[x,y],
может лучше scanline? реально скорая штука.
> отображается на Panel.
каким образом, вообще откуда поток?
← →
palgen © (2005-08-24 08:00) [2]Я использую библиотеку "AVICAP32.DLL" и команды WM_CAP_GRAB_FRAME ,WM_CAP_DRIVER_CONNECT и WM_CAP_DRIVER_DISCONNECT. Это все отображается("видеопоток") на Panel.
← →
palgen © (2005-08-24 08:03) [3]function capCreateCaptureWindowA(lpszWindowName: PCHAR;
dwStyle: longint;
x: integer;
y: integer;
nWidth: integer;
nHeight: integer;
ParentWin: HWND;
nId: integer): HWND;
stdcall external "AVICAP32.DLL";
//==============================================================
procedure TForm1.OpenVideoClick(Sender: TObject);
begin
hWndC := capCreateCaptureWindowA("My Own Capture Window",
WS_CHILD or WS_VISIBLE,
Panel1.Left,
Panel1.Top,
Panel1.Width,
Panel1.Height,
Form1.Handle,
0);
if hWndC <> 0 then
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
end;
//==============================================================
Пробовал на Image.canvas - у меня белый экран ...
← →
Antonn © (2005-08-24 09:36) [4]
> Пробовал на Image.canvas - у меня белый экран ...
а если image.picture.canvas? только надо у этого самого image.picture размеры выставить:
image.picture.width:=Panel1.Width;
image.picture.heigth:=Panel1.Height;
А вообще не пойму, каким образом на самой панели рисуется, ни ее хендла не передается, ничего. Может оверлей?..
← →
DVM © (2005-08-24 10:17) [5]
> В процессе работы мне необходимо сканировать эти картинки,
> используя Pixels[x,y], но у Panel такой возможности нет.
В любом случае DC у панели имеется. А с пом GetPixel() можно получить инфу о состоянии пиксела.
← →
palgen © (2005-08-24 13:06) [6]> В любом случае DC у панели имеется. А с пом GetPixel() можно получить инфу о состоянии пиксела.
Я использую GetRValue, RetGValue и GetBValue - вот фрагмент кода
//===========================================================
var
x, y, R1, G1, B1: integer;
=======
R1 := GetRValue(Form1.Image1.Canvas.Pixels[x,y]);
G1 := GetGValue(Form1.Image1.Canvas.Pixels[x,y]);
B1 := GetBValue(Form1.Image1.Canvas.Pixels[x,y]);
//===========================================================
Как мне приспособить Panel ?
← →
DVM © (2005-08-24 13:11) [7]
> Как мне приспособить Panel ?
DC := GetDC(Panel.Handle);
ClrRef:=GetPixel(DC, X, Y);
R1 := GetRValue(ClrRef);
G1 := GetGValue(ClrRef);
B1 := GetBValue(ClrRef);
← →
palgen © (2005-08-24 13:12) [8]>а если image.picture.canvas? только надо у этого самого >image.picture размеры выставить:
>image.picture.width:=Panel1.Width;
>image.picture.heigth:=Panel1.Height;
>А вообще не пойму, каким образом на самой панели рисуется, ни ее хендла не передается, ничего. Может оверлей?..
Image1.picture.width := Panel1.Width;
Image1.picture.Height := Panel1.Height; => Cannot assign to read-onli property
Вот так вот ...
А рисуется на хендле
//=====================
private
{ Private declarations }
hWndC: THandle;
← →
Antonn © (2005-08-24 13:49) [9]palgen © (24.08.05 13:12) [8]
А рисуется на хендле
а хендл чего? в коде [3] хендл окна, и область вывода, вот и предполагаю что оверлей. т.е. нифига не получишь пиксел. замени Panel1.Left,Panel1.Top,Panel1.Width,Panel1.Height любым другим контроллом, попробуй
← →
Antonn © (2005-08-24 14:48) [10]кстати, а если попробывать TPAinBox?
← →
palgen © (2005-08-24 15:12) [11]Что-то никак не получается ...
← →
Antonn © (2005-08-24 15:20) [12]palgen © (24.08.05 15:12) [11]
что именно не получается?
← →
palgen © (2005-08-24 15:42) [13]Когда вывожу на форму Form1.Handle и считываю с формы, то все значения R1, G1, B1 равны 255, т.е. белый цвет. Почему ?
← →
Antonn © (2005-08-24 16:16) [14]palgen © (24.08.05 15:42) [13]
наверно потому, что на канвасе ничего нет... см. [9]. А еще попробуй запустить в фоне просмотр фильма, и попробуй код, може получится
palgen © (24.08.05 15:42) [13]
Когда вывожу на форму Form1.Handle
хендл - это число, на него не выводят, через него щупают форму:)
← →
palgen © (2005-08-25 07:20) [15]А можно ли всё это связать с компонентом VideoCap - он отображает видеопоток и у него есть хендл ... ?
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c