線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2040
推到 Plurk!
推到 Facebook!

請問要如何將記憶體中的一塊影像資料建立成bitmap元件

答題得分者是:taishyang
chang1981
一般會員


發表:31
回覆:28
積分:11
註冊:2008-09-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-03 17:30:07 IP:61.230.xxx.xxx 訂閱
各位前輩好  小弟最近在利用某家廠商的影像擷取卡
搭配他們提供的BCB元件 來擷取影像供我自己的程式處理
但是該廠所提供的免費元件並沒有辦法直接讀出擷取到影像的bitmap
而是只能回傳一個記憶體裡面的起始位置,以及該張影像的寬高
但我在BCB下一切的影像處理函式幾乎都要從bitmap開始
因此想在這邊請問
如果今天 我只有 1.一張影像在記憶體中的啟始位置
2.影像格式(ex: 24bit 灰階)
3.影像寬高

有沒有辦法用這些資料建立一個bitmap元件
可以秀在image上 也可以拿來處理

小弟曾嘗試寫這樣的程式來嘗試


[code cpp]

BYTE* pPhyImageAddr = (BYTE*)AxAltair1->GetImagePtr(SurfaceHandle,0,0);//利用該元件的函式取得資料指標
int height = AxAltair1->imageheight;//取得影像高
int width = AxAltair1->imagewidth;//取得影像寬
Graphics::TBitmap *tool_Bitmap;//用來存影像的 bitmap
tool_Bitmap = new Graphics::TBitmap;


BYTE* ptr ;
for(int j = 0 ; j < height ; j )
{
ptr = tool_Bitmap->ScanLine[j];

for(int i = 0 ; i < width*3 ; i )//24bit圖形格式所以*3
{
ptr[i]=pPhyImageAddr;
pPhyImageAddr ;//指向下一個BYTE資料
}

}

Image3->Picture->Bitmap->Assign(tool_Bitmap);
Image3->Refresh();

[/code]

這是我自己想像的方法 但是寫下去以後 最後image3根本甚麼都沒秀出來
不過我檢查tool_Bitmap裡面的值的確是有被assign到
因此想請問板上前輩高手 如果只有上述條件 我要如何將記憶體影像重建成buitmap元件呢?
感謝!!!
編輯記錄
chang1981 重新編輯於 2008-11-03 17:31:27, 註解 無‧
chang1981 重新編輯於 2008-11-03 20:47:14, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-03 17:43:12 IP:118.169.xxx.xxx 訂閱
使用前必須先指定tool_Bitmap的寬與高以及pixelformat
chang1981
一般會員


發表:31
回覆:28
積分:11
註冊:2008-09-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-04 08:59:39 IP:61.230.xxx.xxx 訂閱
的確是因為忘了設圖形格式造成圖秀不出來
,感謝站長的指導 謝謝!!!
問題已解決! 以下為正確可用的程式 或許有人會需要參考! 謝謝!!

[code cpp]
BYTE* pPhyImageAddr = (BYTE*)AxAltair1->GetImagePtr(SurfaceHandle,0,0);//利用該元件的函式取得資料指標
int height = AxAltair1->ImageHeight;//取得影像高
int width = AxAltair1->ImageWidth;//取得影像寬
Graphics::TBitmap *tool_Bitmap;//用來存影像的 bitmap
tool_Bitmap = new Graphics::TBitmap;
tool_Bitmap->Width= width;
tool_Bitmap->Height = height;
tool_Bitmap->PixelFormat = pf24bit;

BYTE* ptr ;
for(int j = 0 ; j < height ; j )
{
ptr = (BYTE*)tool_Bitmap->ScanLine[j];

for(int i = 0 ; i < width*3 ; i )//24bit圖形格式所以*3
{
ptr[i]=*pPhyImageAddr;
pPhyImageAddr ;//指向下一個BYTE資料
}

}
Image3->Picture->Bitmap->Assign(tool_Bitmap);
Image3->Refresh();

[/code]
friendlly
高階會員


發表:22
回覆:144
積分:103
註冊:2003-04-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-11-22 01:30:57 IP:125.225.xxx.xxx 訂閱
能說出是那間的影像卡嗎...
可以測試看看影像品質與效能如何

一般影像卡都是輸出RAW 的資料
而後提供 Image Point 這樣你可以隨意複製 到你定意的格式

不過會賣影像卡 提供SDK 的 一般也會有對應的Vision 軟體
或許你可以看看

小弟我是用Euresys 有興趣可以交流交流
chang1981
一般會員


發表:31
回覆:28
積分:11
註冊:2008-09-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-11-24 09:13:16 IP:61.230.xxx.xxx 訂閱
friendlly 大你好!! 我用的是光道視覺科技的影像擷取卡~ 因為不想另外付費買vision元件 所以只使用免費層級的元件(僅供擷取影像/RS232通訊 等基本功能) 它們的免費元件的確有提供一個類似image的元件供使用, 但是那個元件可用的方法跟屬性 個人覺得不好用 所以還是想把影像抓回image自己玩 呵呵!!

編輯記錄
chang1981 重新編輯於 2008-11-24 09:16:07, 註解 無‧
系統時間:2024-04-25 18:02:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!