00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include <fstream.h>
00015 #include "VFWImage.h"
00016 #include "VFWCapture.h"
00017
00018
00019
00020 CbmpUtils::CbmpUtils()
00021 {
00022 Width = 0;
00023 Height = 0;
00024 bmpData = '\0';
00025 pbmi = NULL;
00026 BitmapSize = 0;
00027 }
00028
00029 CbmpUtils::~CbmpUtils()
00030 {
00031 }
00032
00033
00034
00035 int CbmpUtils::LoadBMP()
00036 {
00037 BITMAPINFOHEADER bmih;
00038
00039 CVFWCapture cap;
00040 cap.Initialize();
00041
00042 pbmi = NULL;
00043
00044
00045 if (cap.CaptureDIB(&pbmi, 0, &BitmapSize))
00046 {
00047
00048 bmih = pbmi->bmiHeader;
00049 Width = bmih.biWidth;
00050 Height = bmih.biHeight;
00051 Height = (bmih.biHeight>0) ? bmih.biHeight : -bmih.biHeight;
00052 bmpData = (char *)pbmi;
00053
00054 bmpData += cap.CalcBitmapInfoSize(bmih);
00055 }
00056 cap.Destroy();
00057 return 0;
00058 }
00059
00060
00061
00062
00063 int CbmpUtils::GDIPaint (HDC hdc,int x=0,int y=0)
00064 {
00065 int ret = 0;
00066
00067 ret = SetDIBitsToDevice (hdc,x,y,Width,Height,0,0,
00068 0,Height,(LPVOID)bmpData,pbmi,0);
00069 return ret;
00070 }
00071
00072
00073
00074
00075 int CbmpUtils::SaveBMP(LPCSTR fileName)
00076 {
00077 BITMAPFILEHEADER bfh;
00078
00079 if (!pbmi)
00080 return 1;
00081
00082 ofstream bmpFile(fileName, ios::out | ios::binary);
00083 if (bmpFile.is_open())
00084 {
00085 bfh.bfType = 0x4d42;
00086 bfh.bfSize = (DWORD) BitmapSize + sizeof(BITMAPFILEHEADER);
00087 bfh.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) +
00088 sizeof(BITMAPINFOHEADER) +
00089 pbmi->bmiHeader.biClrUsed *
00090 sizeof (RGBQUAD);
00091 bfh.bfReserved1 = 0;
00092 bfh.bfReserved2 = 0;
00093
00094 bmpFile.write(reinterpret_cast<const char *>(&bfh),sizeof(bfh));
00095 bmpFile.write(reinterpret_cast<const char *>(pbmi),BitmapSize);
00096 bmpFile.close();
00097 }
00098 return 0;
00099 }