VC 杂乱笔记 2

原创 2007年09月30日 15:23:00

保存位图

BOOL SaveBmp(HBITMAP hBitmap, CHAR FileName[])
{
      //设备描述表
     HDC hDC;
     //当前分辨率下每象素所占字节数
      int iBits;
      //位图中每象素所占字节数
      WORD wBitCount;
     //定义调色板大小, 位图中像素字节大小 ,位图文件大小 , 写入文件字节数
     DWORD dwPaletteSize=0, dwBmBitsSize=0, dwDIBSize=0, dwWritten=0;
     //位图属性结构
     BITMAP Bitmap; 
      //位图文件头结构
     BITMAPFILEHEADER bmfHdr;  
     //位图信息头结构
     BITMAPINFOHEADER bi; 
     //指向位图信息头结构 
     LPBITMAPINFOHEADER lpbi; 
     //定义文件,分配内存句柄,调色板句柄
     HANDLE fh, hDib, hPal,hOldPal=NULL;

     //计算位图文件每个像素所占字节数
     hDC = CreateDC("DISPLAY", NULL, NULL, NULL);
    iBits = GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES); 
    DeleteDC(hDC);
    if (iBits <= 1)          wBitCount = 1;
    else if (iBits <= 4) wBitCount = 4;
    else if (iBits <= 8) wBitCount = 8; 
    else wBitCount = 24;

    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.biClrImportant= 0;
    bi.biClrUsed= 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, (HPALETTE)hOldPal, TRUE);
        RealizePalette(hDC);
       ::ReleaseDC(NULL, hDC);
    }  

   //创建位图文件 
   fh = CreateFile(FileName, 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;
 }

利用 win32 API 写文件

void WriteLog(CHAR csMsg[], DWORD dwSize )

 HANDLE hFile;
 DWORD dwNumberOfBytesWritten;

        // 必须指定 OPEN_ALWAYS 标志, 否则不会在原文件内容上添加 
 hFile = CreateFile( _szFileName, GENERIC_WRITE,  FILE_SHARE_WRITE, NULL,  OPEN_ALWAYS, FILE_ATTRIBUTE_HIDDEN,NULL );
 if (hFile == INVALID_HANDLE_VALUE )
 {
  return ;
 }
 
 // 设置文件指针到文件结尾, 在 当前位置 FILE_END, 向后移动 0 字节
 SetFilePointer( hFile , 0, NULL,  FILE_END );
  
 // 这个 API 是设置当前的位置为文件的结尾
 // SetEndOfFile( hFile);
 
 BOOL BRet = WriteFile( hFile, csMsg, dwSize , &dwNumberOfBytesWritten, NULL);
 
 CloseHandle( hFile );
}

利用 win32 API 写文件

void WriteLog(CHAR csMsg[], DWORD dwSize )

 HANDLE hFile;
 DWORD dwNumberOfBytesWritten;

// 必须指定 OPEN_ALWAYS 标志, 否则不会在原文件内容上添加 
 hFile = CreateFile( _szFileName, GENERIC_WRITE,  FILE_SHARE_WRITE, NULL,  OPEN_ALWAYS, FILE_ATTRIBUTE_HIDDEN,NULL );
 if (hFile == INVALID_HANDLE_VALUE )
 {
  return ;
 }
 
 // 设置文件指针到文件结尾, 在 当前位置 FILE_END, 向后移动 0 字节
 SetFilePointer( hFile , 0, NULL,  FILE_END );
  
 // 这个 API 是设置当前的位置为文件的结尾
 // SetEndOfFile( hFile);
 
 BOOL BRet = WriteFile( hFile, csMsg, dwSize , &dwNumberOfBytesWritten, NULL);
 
 CloseHandle( hFile );
}

javaee的杂乱笔记

  • 2016年01月17日 15:14
  • 5.87MB
  • 下载

struts2 杂乱总结

这里总结了

struts2的一个杂乱工程

【android笔记】杂乱

1、请问onTextChanged,beforeTextChanged和afterTextChanged这三个函数有什么区别? 这个字面上的意思应该还蛮好懂的...先看我怎么翻译官方描述的: A. ...

nginx笔记(杂乱版一)

nginx笔记(杂乱版一)网址:http://tengine.taobao.org/book/chapter_02.html#id1阅读源码,调试代码是一个非常重要的手段,非常快一般我们会设置与机器c...

杂乱笔记1

磁盘分区: 分区是通过设置一定量的块大小和扇区将文件系统格式化成硬盘特定区域的行为。分区能够预防接管系统的日志文件破坏操作系统,在一定条件下提供更好的安全 操作系统处于最底层basic level...

杂乱笔记-文字描述

web service: 也叫做 xml webservice 可以接收Internet或Internet上的其他系统中传递过来的请求 是通过SOAP在web上提供的软件服务使用WSDL文件进行说明并...

web编程的纯理论个人杂乱的笔记

web编程的个人笔记整理 初次学到javaweb编程,感觉这个东西好强大,有点怕自己驾驭不了。在大学课堂上加上自己在网上找的学习资料一共学习了25天,总算是理清了一部分的概念!在次把最近做的笔记生成...
  • qsxbzch
  • qsxbzch
  • 2016年04月16日 21:49
  • 89

python学习笔记——杂乱篇

1.python每一行结束后不需要加分号,解释器根据行来区别句子。 2.在python中,^表示异或位运算,** 表示幂运算 3.标识符,以下划线开头是具有特殊意义的,以单下划线开头代表不能直接...

uFrame 1.6杂乱笔记与一些翻译

The Kernel The Kernel是uFrame的本质,负责处理加载场景,系统和服务。Subsystems 作为一个容器,组成许多Nodes。 Subsystems允许你分离项目...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC 杂乱笔记 2
举报原因:
原因补充:

(最多只允许输入30个字)