1)如果要串行化,最好的情況是DIB這個類是從CObject類派生的子類,這樣就可以重載Serialize這個專門用來串行化的函數。如果不是CObject的子類,由於DIB是現成的類,對生手來說,改造的話比較麻煩。可以這樣,自己構造壹個類,這個類是從CObject派生出來的子類,然後將DIB作為該類的壹個成員類。
2)DIB最重要的就是DIB Section和DIB Bits這兩個部分。重載1)中提到的類已經有的Serialize,由於CArchive已經支持對BYTE的串行化,因此可以簡單把DIB Section和DIB Bits以BYTE的形式提供給CArchive。
形如:
if (ar.IsStoring()) {
//將內存中的DIB寫到文件中
PBTYE pDIBSection = (PBYTE)&myDIB->m_DIBSection;//myDIB為DIB類,m_DIBSection為DIB Section
for (int i = 0; i < sizeof(BITMAPINFOHEADER); i++) {
ar << *pDIBSection++;
}
} else {
//從文件中讀出DIB
...
}
...
大概是這樣的代碼就能把DIB Section進行串行化了。
3)妳的程序中,不知道把DIB放在哪個類裏了,假設為CDocument。重載CDocument的Serialize函數並加入需要串行化的代碼行:
myDIB.Serialize();