Форум: "Media";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
ВнизHDC Найти похожие ветки
← →
debuger © (2004-09-21 17:38) [0]Я сотворил видеозахват, рисует он на TPanel. Как мне побыстрее содрать с TPanel картинку и запихнуть ее в обычный массив?
← →
Mihey_temporary © (2004-09-21 19:46) [1]Рисуй на TBitmap через TPanel.PaintTo. Далее Scanline.
← →
Fenik (2004-09-21 20:31) [2]
type
TMyPanel = class(TPanel);
procedure CopyPanelToBitmap(Panel: TPanel; Bitmap: TBitmap);
var R: TRect;
begin
R := Panel.ClientRect;
with Bitmap, R do
begin
Width := Right - Left;
Height := Bottom - Top;
Canvas.CopyRect(Rect(0, 0, Width, Height), TMyPanel(Panel).Canvas, R);
end;
end;
Bitmap.Canvas.Pixels[x, y] - это почти обычный массив :))
Ну если нужно все таки в обычный массив. То вот -type
pRGB = ^TRGB;
TRGB = packed record
B, G, R: Byte;
end;
var
A: array of array of TRGB;
x, y: Integer;
Pixel: pRGB;
begin
SetLength(A, Bitmap.Height);
for y := 0 to Bitmap.Height - 1 do
begin
SetLength(A[y], Bitmap.Width);
Pixel := Bitmap.ScanLine[y];
for x := 0 to Bitmap.Width - 1 do
begin
A[y, x] := Pixel^;
Inc(Pixel);
end;
end;
end;
Вот теперь A - самый что ни наесть обычный массив. Динамический :))
← →
debuger © (2004-09-21 21:02) [3]Поподробней опишы появление BitMap, я немного не понял откуда он взялся и как именно.
← →
Рыба © (2004-09-21 21:14) [4]>debuger © (21.09.04 21:02) [3]
Bitmap: TBitmap;
TBitmap - класс для работы с растрами. Содержит двумерный массив пикселей. Подробнее читай в книгах.
← →
debuger © (2004-09-21 22:49) [5]Я посараюсь пояснить что к чему. Для начала смотрим кусок кода.
var
FrameCurrent : TBitmap;
AviStream : PAVISTREAM;
Frame : PGetFrame;
pbmi : PBITMAPINFOHEADER;
bits : Pointer;
wrkDC: HDC;
кусок кода:
pbmi := AVIStreamGetFrame(Frame, CurrFrame);
if CurrFrame = 0 then bits := Pointer(Integer(pbmi) + SizeOf(TBITMAPINFOHEADER));
wrkDC := GetDC(Panel1.Handle);
FrameCurrent.Handle := CreateDIBitmap(
wrkDC,
pbmi^,
CBM_INIT,
bits,
PBITMAPINFO(pbmi)^,
DIB_RGB_COLORS );
BitBlt (wrkDC,
0,
0,
AVIWidth,
AVIHeight,
FrameCurrent.Canvas.Handle,
0,
0,
SRCCOPY);
Тут на панельку рисуется авишка, потом криатиться битмапа и все в нее отлично капируется.
Потом видеозахват стал не с авишки, а с карточки, на ту же панельку и т.д. Я бы повторил все как в примере, но мне непонятна природа bits, и не до конца понятно как формировать структуру TBitMapInfoHeader.
Пробовал вместо CreateDIBitmap CreateCompatibleBitmap, выглядит так:
wrkDC := GetDC(Panel1.Handle);
FrameCurrent.Handle := CreateCompatibleBitmap(
wrkDC,
100,
100 );
BitBlt (wrkDC,
0,
0,
AVIWidth,
AVIHeight,
FrameCurrent.Canvas.Handle,
0,
0,
SRCCOPY);
но когда делаю FrameCurrent.SaveToFile( "1.bmp" )
то полученный файл черный, т.е. все пиксели черные и нима там и намека на мою картинку.
Или как мне создать Битмап с нормальным хендлом, что-бы использовать БитБлт.
Да, пробовал даже так:
tmpCanvas := TCanvas.Create;
wrkDC := GetDC(Panel1.Handle);
tmpCanvas.Handle := wrkDC;
MyCanvas.CopyRect( wRect, tmpCanvas, wRect );
и все равно нифиха не получаю.
← →
Mihey_temporary © (2004-09-21 23:17) [6]2 debuger:
Каким образом делаешь видеозахват с карточки? Выводится ли изображение на панель или в этом проблема? Дело в том, что в том примере с AVI указатель bits получает адрес из pbmi, который в свою очередь из функции работы с AVI. Как происходит во втором случае, если происходит вообще?
← →
debuger © (2004-09-21 23:25) [7]Видеозахват через родное карточкино СДК:
AVER_Init( Panel1.Handle );
AVER_PaintOverlay( pRect );
Вопрос в том как с Панельки скопировать изображение в статический массив.
← →
Mihey_temporary © (2004-09-22 00:06) [8]
> AVER_PaintOverlay( pRect );
Мне не нравится эта фраза. Overlay - это особая поверхность DirectX, на простой захват не берётся.
Попробуй сделать всё таки TPanel.PaintTo на TBitmap.Canvas.Handle и сохранить TBitmap. Если изображения нет, то и тот код выше не получится.
← →
debuger © (2004-09-22 17:46) [9]Вот именно! Если бы изображение с панельки сдиралось на такую шару, я бы не спрашывал. А так все что я могу с нее сдереть это - пустой скриншот.
← →
Mihey_temporary © (2004-09-22 19:48) [10]
> debuger © (22.09.04 17:46) [9]
Есть способы сдирания и с оверлеев. Ищи инфу.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.033 c