Re: [問題] 抓取 1394 攝影機

看板C_and_CPP (C/C++)作者 (玩具蘿莉≠脫衣蘿莉)時間17年前 (2009/05/24 18:30), 編輯推噓1(1017)
留言18則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《ToyLoli (玩具蘿莉≠脫衣蘿莉)》之銘言: : 我手上有一台 AVT 1394 攝影機,他有給 SDK : 裡面有一段取得單一影像的範例是這樣的 : extern ID_TYPE nCamId; // id of an already opened camera : extern UINT32_TYPE nHorizontalResolution; // the currently configured image : // size : extern UINT32_TYPE nVerticalResolution; // : ATL::CImage Image; : Image.Create( nHorizontalResolution , -1 * nVerticalResolution , 24 ); : UNI_RETURN_TYPE hr = UCC_GrabBitmapImage( nCamId , : (UINT8_TYPE*) Image.GetBits() , : INFINITE ); : 黃色的部份我 google 了一下,好像是 VC 內建的函數? : 由於學長寫的程式是用 BCB,如果我要用 BCB 寫出相同的作用,應該要使用哪些元件 : 或是函式呢?可否請各位前輩提點一下? 自己回答看看,不知道對不對 黃色部份應該是要創建一個可以存影像的 buffer,參考書上的範例後寫出 Graphics::TBitmap *TempBitmap; TempBitmap = new Graphics::TBitmap(); TempBitmap -> Width = nHorizontalResolution; TempBitmap -> Height = nVerticalResolution; TempBitmap -> PixelFormat = pf24bit; compile 可以過,但是不知道對不對 因為接下來卡在 Image.GetBits() 不知道該怎樣改 囧 再次請教各位前輩該從哪方面著手 Orz -- 法輪弓 遠程 弓 8300 - 9500傷害 速度 1.50 (每秒傷害5933.3) 裝備: 你在中國解放軍的聲望將永久仇恨。 擊中時可能: 迫使敵人召喚一名武警為他作戰。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.126.145.206

05/24 18:52, , 1F
GetBits()只是取得整個影像資料的記憶體指標
05/24 18:52, 1F

05/24 18:53, , 2F
也就是Pixel(0,0)的位置... TBitmap你查一下,應該也有
05/24 18:53, 2F
唔...還是沒有任何頭緒,不知道該用什麼去取代 GetBits() 我嘗試著將 GetBits() 以 TempBitmap 取代是可以 compile 過 但是程式還是抓不到影像 另外,上面亮白色那邊,有人可以幫我看看這樣寫取代那兩行程式碼是對的嗎? ※ 編輯: ToyLoli 來自: 140.126.145.206 (05/24 22:33)

05/25 12:45, , 3F
你的Image object, 沒有初始化, 你必須告知建立的大小
05/25 12:45, 3F

05/25 12:46, , 4F
我不確定TBitmap直接指定Width和Height是否就會建立完成
05/25 12:46, 4F

05/25 12:47, , 5F
因為他的H/V/D是分開指定的, 感覺很怪...
05/25 12:47, 5F

05/25 12:50, , 6F
TBitmap new過以後這樣用就可以了, 雖然我也搞不太懂它
05/25 12:50, 6F

05/25 12:51, , 7F
怎麼依照重設的W/H/D來分配memory的....@_@"
05/25 12:51, 7F

05/25 12:52, , 8F
如果是要拿到pixel data, TBitmap是直接 ->ScanLine[i]
05/25 12:52, 8F

05/25 12:52, , 9F
i就是第條的scanline, 從0~Height-1, 至於每個pixel有
05/25 12:52, 9F

05/25 12:52, , 10F
多少byte就看你的pixelformat了.
05/25 12:52, 10F

05/25 12:53, , 11F
如果你是要顯示, 我記得直接丟個Panel給它就可以顯示了.
05/25 12:53, 11F

05/25 12:54, , 12F
如果是用VCL元件bar上的TImage, 簡單的操作可以像這樣~~
05/25 12:54, 12F

05/25 12:55, , 13F
Image->Picture->Bitmap->....就可以access pixel了.
05/25 12:55, 13F

05/25 12:56, , 14F
不過, 如果你的Image沒有load過Bitmap圖檔, 就不能直接
05/25 12:56, 14F

05/25 12:56, , 15F
用, 還是要經過TBitmap new的程序才可以....
05/25 12:56, 15F

05/25 12:57, , 16F
有個問題是, TBitmap的ScanLine我不記得有保證一定連續
05/25 12:57, 16F

05/25 12:57, , 17F
Image.GetBit應該是放destination吧, 那就自己開一塊
05/25 12:57, 17F

05/25 12:58, , 18F
WxHxD的空間給它, 再一條一條scanline copy進TBitmap
05/25 12:58, 18F
文章代碼(AID): #1A6I6teP (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1A6I6teP (C_and_CPP)