1. 打开您的程序代码文件或者解决方案文件,确保您已经对程序进行了编辑和调试。
2. 选择“文件”菜单,然后选择“保存”或者“另存为”。
3. 如果您选择“保存”,则程序文件将以当前文件名和格式进行保存。如果您选择“另存为”,则可以选择新的文件名和文件格式进行保存,同时可以选择保存的位置和其他选项。
4. 在保存过程中,您需要根据系统提示进行相关 *** 作,例如选择保存类型、路径、文件名、编码方式等等。
5. 如果您需要对程序进行版本控制或备份,可以选择相关的版本控制工具或者备份工具进行 *** 作,以保证程序安全和可靠。
需要注意的是,在保存程序文件时,建议您使用规范的文件命名和格式,以便于程序管理和维护。同时,也需要保护程序的安全和知识产权,避免因程序泄露或者侵权导致的法律问题和商业风险。如果您需要更多的帮助或者支持,可以参考Visual Studio 2010的使用手册或者联系相关技术支持。
//保存位图
int SaveBitmap(HBITMAP hBitmap, LPSTR lpFileName)
{
//lpFileName 为位图文件名
HDC hDC
//设备描述表
int iBits
//当前显示分辨率下每个像素所占字节数
WORD wBitCount
//位图中每个像素所占字节数
//定义调色板大小, 位图中像素字节大小 , 位图文件大小 , 写入文件字节数
DWORD dwPaletteSize=0,dwBmBitsSize,dwDIBSize, dwWritten
BITMAP Bitmap
//位图属性结构
BITMAPFILEHEADER bmfHdr
//位图文件头结构
BITMAPINFOHEADER bi
//位图信息头结构
LPBITMAPINFOHEADER lpbi
//指向位图信息头结构
HANDLE fh, hDib, hPal
HPALETTE hOldPal=NULL
//定义文件,分配内存句柄,调色板句柄
//计算位图文件每个像素所占字节数
iBits=24
if (iBits <= 1)
wBitCount = 1
else if (iBits <= 4)
wBitCount = 4
else if (iBits <= 8)
wBitCount = 8
else if (iBits <= 32)
wBitCount = 24
//计算调色板大小
if (wBitCount <= 8)
dwPaletteSize=(1<<wBitCount)*sizeof(RGBQUAD)
//设置位图信息头结构
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap)
bi.biSize = sizeof(BITMAPINFOHEADER)
bi.biWidth = Bitmap.bmWidth
bi.biHeight =Bitmap.bmHeight
bi.biPlanes = 1
bi.biBitCount = wBitCount
bi.biCompression = BI_RGB
bi.biSizeImage = 0
bi.biXPelsPerMeter = 0
bi.biYPelsPerMeter = 0
bi.biClrUsed = 0
bi.biClrImportant = 0
dwBmBitsSize = ((Bitmap.bmWidth*wBitCount+31)/32)*4*Bitmap.bmHeight
//为位图内容分配内存
hDib = GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER))
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib)
*lpbi = bi
// 处理调色板
hPal = GetStockObject(DEFAULT_PALETTE)
if (hPal)
{
hDC = GetDC(NULL)
hOldPal=SelectPalette(hDC,(HPALETTE)hPal,FALSE)
RealizePalette(hDC)
}
// 获取该调色板下新的像素值
GetDIBits(hDC,hBitmap,0,(UINT)Bitmap.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize, (BITMAPINFO *)lpbi,DIB_RGB_COLORS)
//恢复调色板
if (hOldPal)
{
SelectPalette(hDC, hOldPal, TRUE)
RealizePalette(hDC)
ReleaseDC(NULL, hDC)
}
//创建位图文件
fh=CreateFile(lpFileName, GENERIC_WRITE,0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL)
if (fh==INVALID_HANDLE_VALUE)
return FALSE
// 设置位图文件头
bmfHdr.bfType = 0x4D42 // "BM"
dwDIBSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwPaletteSize+dwBmBitsSize
bmfHdr.bfSize = dwDIBSize
bmfHdr.bfReserved1 = 0
bmfHdr.bfReserved2 = 0
bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER)+dwPaletteSize
// 写入位图文件头
WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL)
// 写入位图文件其余内容
WriteFile(fh, (LPSTR)lpbi, dwDIBSize,
&dwWritten, NULL)
//清除
GlobalUnlock(hDib)
GlobalFree(hDib)
CloseHandle(fh)
return TRUE
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)