📄 ptbmpfun.cpp
字号:
#include "StdAfx.h"
#include "PtBmpFun.h"
#include <wingdi.h>
#include "CEPaint.h"
#include <afx.h>
BYTE gBmp_Bits[128 + PT_PIC_BIT_COUNT*PT_PIC_MAX_SIZE_X*PT_PIC_MAX_SIZE_Y]; //16 color ,288 width ,200 height
//////////////////////////////////////////////////////////////////////////
INT CreateDefBmpHeader()
{
memset(&m_pt_app_info.m_bmp_file_header,0,sizeof(m_pt_app_info.m_bmp_file_header));
memset(&m_pt_app_info.m_bmp_file_info,0,sizeof(m_pt_app_info.m_bmp_file_info));
m_pt_app_info.m_bmp_file_header.bfType = 0x4d42;
m_pt_app_info.m_bmp_file_header.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
INT32 iBMPBytes = (PT_PIC_DEF_SIZE_X * PT_PIC_DEF_SIZE_Y) * PT_PIC_BIT_COUNT;
m_pt_app_info.m_bmp_file_header.bfSize = m_pt_app_info.m_bmp_file_header.bfOffBits + iBMPBytes;
m_pt_app_info.m_bmp_file_info.bmiHeader.biBitCount = PT_PIC_BIT_COUNT<<3;
m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight = PT_PIC_DEF_SIZE_Y;
m_pt_app_info.m_bmp_file_info.bmiHeader.biPlanes = 1;
m_pt_app_info.m_bmp_file_info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
m_pt_app_info.m_bmp_file_info.bmiHeader.biSizeImage = iBMPBytes;
m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth = PT_PIC_DEF_SIZE_X;
return 0;
}
INT LoadBmpFromFile(TCHAR *filename)
{
HANDLE fh;
fh = CreateFile(filename,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(INVALID_HANDLE_VALUE == fh)
return 1;
memset(&m_pt_app_info.m_bmp_file_header,0,sizeof(m_pt_app_info.m_bmp_file_header));
ULONG length = 0;
ReadFile(fh,&m_pt_app_info.m_bmp_file_header,sizeof(BITMAPFILEHEADER),&length,NULL);
if(m_pt_app_info.m_bmp_file_header.bfType != 0x4d42)
return 2;
ReadFile(fh,&m_pt_app_info.m_bmp_file_info,sizeof(BITMAPINFO),&length,NULL);
if(m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth > PT_PIC_MAX_SIZE_X || m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight > PT_PIC_MAX_SIZE_Y)
return 3;
if(m_pt_app_info.m_bmp_file_info.bmiHeader.biBitCount != (PT_PIC_BIT_COUNT<<3))
return 4;
if(0xFFFFFFFF == SetFilePointer(fh,m_pt_app_info.m_bmp_file_header.bfOffBits,0,FILE_BEGIN))
return 5;
INT i = 0;
memset(gBmp_Bits,0,sizeof(gBmp_Bits));
i = ReadFile(fh,m_pt_app_info.m_bmp_bits_ptr,m_pt_app_info.m_bmp_file_info.bmiHeader.biSizeImage,&length,NULL);
//TRACE("LoadFile %d", length);
TRACE(L"LoadFile %d\n",length);
return 0;
}
INT LoadBmpToDC(HDC hdc)
{
INT wd = m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth;
INT ht = m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight;
// INT i = SetDIBitsToDevice(hdc,0,0,
// wd,ht,
// 0,0,
// 0,ht,
// m_pt_app_info.m_bmp_bits_ptr,
// &m_pt_app_info.m_bmp_file_info,
// DIB_RGB_COLORS);
INT i = StretchDIBits(hdc,
0,0,
wd,ht,
0,0,
wd,ht,
m_pt_app_info.m_bmp_bits_ptr,
&m_pt_app_info.m_bmp_file_info,
DIB_RGB_COLORS,SRCCOPY);
//i = GetLastError();
return 0;
}
INT SaveBmpFromDC(HDC hdc)
{
// INT i = GetDIBits(
// m_pt_app_info.m_pt_backup_hdc,
// m_pt_app_info.m_pt_backup_hbmp,
// 0,m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight,
// m_pt_app_info.m_bmp_bits_ptr,
// &m_pt_app_info.m_bmp_file_info,
// DIB_RGB_COLORS);
return 0;
}
INT SaveBmpToFile(TCHAR *filename)
{
//* Save to File.And Create BITMAPFILEHEADER.
// BITMAPFILEHEADER bmfh;
// ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));
// bmfh.bfType = 0x4d42;
//
// bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
//
// int iBMPBytes = (gBmp_Info_Ref.bmiHeader.biWidth * gBmp_Info_Ref.bmiHeader.biHeight) * 3;
//
// bmfh.bfSize = bmfh.bfOffBits + iBMPBytes;
//
// TCHAR szBMPFileName[32];
//
// strcpy(szBMPFileName,filename);
//
// HANDLE fh = CreateFile(szBMPFileName,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
//
// ULONG length;
// INT32 t_color;
//
// if(INVALID_HANDLE_VALUE == fh)
// return 0;
//
// WriteFile(fh, &bmfh, sizeof(BITMAPFILEHEADER),&length,NULL);
// WriteFile(fh, &gBmp_Info_Ref, sizeof(BITMAPINFOHEADER),&length,NULL);
//
// WriteFile(fh, gBmp_Bits,iBMPBytes,&length,NULL);
//
// CloseHandle(fh);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -