如何將eVision的影像傳至BCB的TImage元件上顯示? |
尚未結案
|
po_tacc
一般會員 發表:5 回覆:5 積分:7 註冊:2010-07-06 發送簡訊給我 |
各位好,以下程式我是參考anumis的Euresys EBW8Image RAW Queue所寫的, 但目前我發生一些問題,所以想請各位前輩是否可以幫忙解疑惑, 當讀入不同Size的影像時,BCB的TImage顯示不正確,如附件中的Test1 & Test2的圖像 在BCB的TImage產生不一樣的顯示(如附件中的Test1的圖檔), 但如果改變pms->Position = (i)* (m_pBitmap->Width 16); BCB的TImage顯示就會變的正常, 我在想是不是Memory資料排列的問題呢? 但是不知道該如何下手, 麻煩各位大大是否可以幫我解疑惑呢? 感謝!! [code cpp] PByteArray *pRawPtr = new PByteArray(); TMemoryStream* pms = new TMemoryStream() ; Graphics::TBitmap *m_pBitmap; EBW8_ShowImage.Load(BmpFileName.c_str()); //這是eVision Image Buffer pms->Position = 0; pms->Size = 0; *pRawPtr = PByteArray(EBW8_ShowImage.GetImagePtr(0,0)); //請問pms->Write這一段是否已將EBW8_ShowImage資料寫入memory了呢? pms->Write(pRawPtr[0],EBW8_ShowImage.GetWidth()*EBW8_ShowImage.GetHeight()); // 建立灰階調色盤 LogPal GrayPalette; //設定版本資訊 GrayPalette.lpal.palVersion = 0x300; //設定調色盤內的色彩數目 GrayPalette.lpal.palNumEntries = 256; for(long Index = 0; Index < 256; Index ) { GrayPalette.lpal.palPalEntry[Index].peRed = (BYTE)Index; GrayPalette.lpal.palPalEntry[Index].peGreen = (BYTE)Index; GrayPalette.lpal.palPalEntry[Index].peBlue = (BYTE)Index; GrayPalette.lpal.palPalEntry[Index].peFlags = PC_RESERVED; } m_pBitmap->PixelFormat = pf8bit; m_pBitmap->Palette = CreatePalette(&GrayPalette.lpal); m_pBitmap->Height = EBW8_ShowImage.GetHeight(); m_pBitmap->Width = EBW8_ShowImage.GetWidth(); //請問為何不能直接使用LoadFromStream呢? m_pBitmap->LoadFromStream(pms); for(int i =0 ; i<=m_pBitmap->Height-1 ; i ){ //問題目前出在這裡 pms->Position = (i)* (m_pBitmap->Width); //目前位置 *pRawPtr =(PByteArray )m_pBitmap->ScanLine[i] ; pms->Read(pRawPtr[0],m_pBitmap->Width); } [/code] |
po_tacc
一般會員 發表:5 回覆:5 積分:7 註冊:2010-07-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |