?? 行程編碼.c
字號(hào):
void CCh1_1View::OnCodeRLE()
{
// 對(duì)當(dāng)前圖像進(jìn)行行程編碼(存為PCX格式文件)
// 獲取文檔
CCh1_1Doc* pDoc = GetDocument();
// 指向DIB的指針
LPSTR lpDIB;
// 指向DIB象素指針
LPSTR lpDIBBits;
// 鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的行程編碼)
if (::DIBNumColors(lpDIB) != 256)
{
// 提示用戶
MessageBox("目前只支持256色位圖的行程編碼!", "系統(tǒng)提示" ,
MB_ICONINFORMATION | MB_OK);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 返回
return;
}
// 更改光標(biāo)形狀
BeginWaitCursor();
// 文件保存路徑
CString strFilePath;
// 初始化文件名為原始文件名
strFilePath = pDoc->GetPathName();
// 更改后綴為PCX
if (strFilePath.Right(4).CompareNoCase(".BMP") == 0)
{
// 更改后綴為PCX
strFilePath = strFilePath.Left(strFilePath.GetLength()-3) + "PCX";
}
else
{
// 直接添加后綴PCX
strFilePath += ".PCX";
}
// 創(chuàng)建SaveAs對(duì)話框
CFileDialog dlg(FALSE, "PCX", strFilePath, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"PCX圖像文件 (*.PCX) | *.PCX|所有文件 (*.*) | *.*||", NULL);
// 提示用戶選擇保存的路徑
if (dlg.DoModal() != IDOK)
{
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢復(fù)光標(biāo)
EndWaitCursor();
// 返回
return;
}
// 獲取用戶指定的文件路徑
strFilePath = dlg.GetPathName();
// CFile和CFileException對(duì)象
CFile file;
CFileException fe;
// 嘗試創(chuàng)建指定的PCX文件
if (!file.Open(strFilePath, CFile::modeCreate |
CFile::modeReadWrite | CFile::shareExclusive, &fe))
{
// 提示用戶
MessageBox("打開(kāi)指定PCX文件時(shí)失??!", "系統(tǒng)提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
// 調(diào)用DIBToPCX256()函數(shù)將當(dāng)前的DIB保存為256色PCX文件
if (::DIBToPCX256(lpDIB, file))
{
// 提示用戶
MessageBox("成功保存為PCX文件!", "系統(tǒng)提示" ,
MB_ICONINFORMATION | MB_OK);
}
else
{
// 提示用戶
MessageBox("保存為PCX文件失?。?quot;, "系統(tǒng)提示" ,
MB_ICONINFORMATION | MB_OK);
}
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢復(fù)光標(biāo)
EndWaitCursor();
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -