全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2197
推到 Plurk!
推到 Facebook!

關於BMP和AVI互相轉換

答題得分者是:istillloving
k033866394
一般會員


發表:1
回覆:4
積分:1
註冊:2010-07-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-07-21 22:26:18 IP:220.138.xxx.xxx 訂閱
 我是一BCB的新手
還請各位多多指教

我想做一個可以BMP和AVI互轉的程式
參考了http://delphi.ktop.com.tw/board.php?cid=168&fid=921&tid=41002這篇
把BMP轉AVI做出來了
但是不知道要如何轉回去
請各位高手提供一些提示

還有為什麼那篇轉出來的AVI檔用KMP去播放
還沒播完就會自動停止
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-08-17 15:16:24 IP:140.127.xxx.xxx 訂閱
參考一下這篇

http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=101378

有什麼問題我們再討論



===================引 用 k033866394 文 章===================
我是一BCB的新手
還請各位多多指教

我想做一個可以BMP和AVI互轉的程式
參考了http://delphi.ktop.com.tw/board.php?cid=168&fid=921&tid=41002這篇
把BMP轉AVI做出來了
但是不知道要如何轉回去
請各位高手提供一些提示

還有為什麼那篇轉出來的AVI檔用KMP去播放
還沒播完就會自動停止
------
恩...
編輯記錄
istillloving 重新編輯於 2010-08-17 15:18:33, 註解 無‧
istillloving 重新編輯於 2010-08-17 15:19:40, 註解 無‧
istillloving 重新編輯於 2010-08-17 15:24:00, 註解 無‧
istillloving 重新編輯於 2010-08-17 15:24:20, 註解 無‧
istillloving 重新編輯於 2010-08-17 15:24:38, 註解 無‧
istillloving 重新編輯於 2010-08-17 15:24:51, 註解 無‧
istillloving 重新編輯於 2010-08-17 15:25:27, 註解 無‧
istillloving 重新編輯於 2010-08-17 15:26:56, 註解 無‧
istillloving 重新編輯於 2010-08-17 15:27:11, 註解 無‧
istillloving 重新編輯於 2010-08-17 15:28:15, 註解 無‧
k033866394
一般會員


發表:1
回覆:4
積分:1
註冊:2010-07-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-08-18 15:00:38 IP:220.138.xxx.xxx 訂閱
istillloving大的程式我看了

作為轉換核心的TMyAVIUnit我也有找到

但有些部分看不太懂

在GetFrame(Graphics::TBitmap *pBitmap, long Index)中

Byte *pDIB = (Byte *)AVIStreamGetFrame(pGetFrame, Index);
// get the data of 'real bitmap'
Byte *pDest = (Byte *)pFBitmap->ScanLine[FHeight - 1];
CopyMemory(pDest, pDIB 0x28, pBIH->biSizeImage);

為什麼pDest只有ScanLine一行

就可以把整個Stream讀進去



編輯記錄
k033866394 重新編輯於 2010-08-18 15:01:10, 註解 無‧
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-08-18 15:36:12 IP:140.127.xxx.xxx 訂閱
您好:

關於這點我也不是很清楚呢

CopyMemory(pDest, pDIB 0x28, pBIH->biSizeImage);

會不會是因為這一段

因為一開始 ScanLine[FHeight - 1]; 指到每一行的開頭

然後用CopyMemory填進去阿 說真的這我也看不太懂

先看看定義先
http://msdn.microsoft.com/en-us/library/aa366535(VS.85).aspx

0x28 我猜應該是為了跳過標頭檔之類的吧



===================引 用 k033866394 文 章===================
istillloving大的程式我看了

作為轉換核心的TMyAVIUnit我也有找到

但有些部分看不太懂

在GetFrame(Graphics::TBitmap *pBitmap, long Index)中

Byte *pDIB = (Byte *)AVIStreamGetFrame(pGetFrame, Index);
// get the data of 'real bitmap'
Byte *pDest = (Byte *)pFBitmap->ScanLine[FHeight - 1];
CopyMemory(pDest, pDIB 0x28, pBIH->biSizeImage);

為什麼pDest只有ScanLine一行

就可以把整個Stream讀進去



------
恩...
編輯記錄
istillloving 重新編輯於 2010-08-18 15:44:03, 註解 無‧
istillloving 重新編輯於 2010-08-18 15:52:00, 註解 無‧
k033866394
一般會員


發表:1
回覆:4
積分:1
註冊:2010-07-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-08-25 14:07:07 IP:120.125.xxx.xxx 訂閱
 對不起這麼晚才回復 
最近事情開始有點趕了
回正題
開頭不是應該是ScanLine[0]嗎
ScanLine[FHeight - 1]應該是BitMap的最後一行
另外還發現了一個問題
不曉得為什麼當我做出一個AVI檔
用AddFrame加進去BMP檔皆為45*128時
當我想在開這個AVI檔時
就會在OpenAVIFile裡的AVIFileGetStream跳出錯誤

新增點陣圖影像.jpg

可是當我改用成100*128的時候又沒有問題
編輯記錄
k033866394 重新編輯於 2010-08-25 14:09:59, 註解 無‧
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-08-25 16:21:15 IP:124.9.xxx.xxx 訂閱
哈囉你好:

你改過的程式壓起來後PO給我我試看看



===================引 用 k033866394 文 章===================
對不起這麼晚才回復
最近事情開始有點趕了
回正題
開頭不是應該是ScanLine[0]嗎
ScanLine[FHeight - 1]應該是BitMap的最後一行
另外還發現了一個問題
不曉得為什麼當我做出一個AVI檔
用AddFrame加進去BMP檔皆為45*128時
當我想在開這個AVI檔時
就會在OpenAVIFile裡的AVIFileGetStream跳出錯誤

新增點陣圖影像.jpg


可是當我改用成100*128的時候又沒有問題
------
恩...
k033866394
一般會員


發表:1
回覆:4
積分:1
註冊:2010-07-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-08-27 22:42:45 IP:220.138.xxx.xxx 訂閱
不好意思
問題解決了
原因是我有部分程式碼打錯
現在又有另外一個問題出現
我想要做機密分享
但是我原本加入AVI的機密圖
轉回BMP時卻和原本的圖不一樣
不曉得是什麼原因

用WinHex去看檔案時發現有部分資料錯誤

但是用其他128*128的圖去轉都沒有問題

還是有其他方法可以把AVI的Stream取出來一個一個處理

不曉得該如何用附加檔

所以先傳到其他空間

http://www.mediafire.com/?6pd6m1gvw9z2c49

編輯記錄
k033866394 重新編輯於 2010-08-27 22:48:56, 註解 無‧
k033866394 重新編輯於 2010-08-28 08:55:35, 註解 無‧
k033866394
一般會員


發表:1
回覆:4
積分:1
註冊:2010-07-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2010-09-20 23:25:33 IP:220.138.xxx.xxx 訂閱
我找到問題了

原因是我在存那張圖的時候

沒有把PixelFormat 設定為 pf24bit

程式中BMP加入AVI的byte數計算為 長*寬*一個pixel幾byte


系統時間:2017-10-21 9:20:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!