📄 行程编码.c
字号:
void CCh1_1View::OnCodeRLE()
{
// 对当前图像进行行程编码(存为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色位图的行程编码!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 解除锁定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 返回
return;
}
// 更改光标形状
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";
}
// 创建SaveAs对话框
CFileDialog dlg(FALSE, "PCX", strFilePath, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"PCX图像文件 (*.PCX) | *.PCX|所有文件 (*.*) | *.*||", NULL);
// 提示用户选择保存的路径
if (dlg.DoModal() != IDOK)
{
// 解除锁定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢复光标
EndWaitCursor();
// 返回
return;
}
// 获取用户指定的文件路径
strFilePath = dlg.GetPathName();
// CFile和CFileException对象
CFile file;
CFileException fe;
// 尝试创建指定的PCX文件
if (!file.Open(strFilePath, CFile::modeCreate |
CFile::modeReadWrite | CFile::shareExclusive, &fe))
{
// 提示用户
MessageBox("打开指定PCX文件时失败!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
// 调用DIBToPCX256()函数将当前的DIB保存为256色PCX文件
if (::DIBToPCX256(lpDIB, file))
{
// 提示用户
MessageBox("成功保存为PCX文件!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
}
else
{
// 提示用户
MessageBox("保存为PCX文件失败!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
}
// 解除锁定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢复光标
EndWaitCursor();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -