Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.05;
Скачать: CL | DM;

Вниз

Как перевести 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 вся ветка

Текущий архив: 2006.02.05;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.031 c
2-1136883428
Pazitron_Brain
2006-01-10 11:57
2006.02.05
Как в Делфи 7 установить Клиент и Сервер сокеты


15-1137279478
Volf_555
2006-01-15 01:57
2006.02.05
Разблокирование возможностей компьютера


2-1137667115
qwersdgvnb
2006-01-19 13:38
2006.02.05
try ... except в цикле


2-1137694944
Tolik
2006-01-19 21:22
2006.02.05
CreateThread(nil,0,@MyProcedure,0,0,nil);


2-1136901585
M@X_1
2006-01-10 16:59
2006.02.05
Циклический опрос COM порта