首页 > 其他分享 >C生成曲线BMP

C生成曲线BMP

时间:2022-11-30 12:02:41浏览次数:60  
标签:NULL bb bmiHeader 曲线 bi 生成 BMP fh bitmap

 C生成曲线BMP   http://zhidao.baidu.com/question/222913503.html     屏幕截屏 http://topic.csdn.net/u/20120822/13/e52e7b2a-e151-4985-9aa7-934d9f38c8de.html   #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include<Windows.h> typedef unsigned char  BYTE; typedef unsigned short WORD; typedef unsigned long  DWORD; typedef long                  LONG;   #pragma pack (2)         int SaveBitmapToFile(BITMAP *bitmap, LPCWSTR lpFileName,char *lpBuf) {    DWORD dwWritten;    BITMAPFILEHEADER   bmfHdr;    BITMAPINFOHEADER   bi;    HANDLE          fh=NULL;    bi.biSize = sizeof(BITMAPINFOHEADER);    bi.biWidth= bitmap->bmWidth;    bi.biHeight = bitmap->bmHeight;    bi.biPlanes = 1;    bi.biBitCount      = bitmap->bmBitsPixel*8;    bi.biCompression   = BI_RGB;    bi.biSizeImage     = 0;    bi.biXPelsPerMeter = 0;    bi.biYPelsPerMeter = 0;    bi.biClrUsed       = 0;    bi.biClrImportant  = 0;    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"    bmfHdr.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)+bitmap->bmWidth*bitmap->bmHeight*bitmap->bmBitsPixel;    bmfHdr.bfReserved1 = 0;    bmfHdr.bfReserved2 = 0;    bmfHdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER);    WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);    WriteFile(fh, ( char *)&bi,sizeof (BITMAPINFOHEADER), &dwWritten, NULL);    WriteFile(fh, ( char *)lpBuf,bitmap->bmWidth*bitmap->bmHeight*bitmap->bmBitsPixel, &dwWritten, NULL);    FlushFileBuffers(fh);    CloseHandle(fh);    return true; }     int GetBitmapFromScreen(LPCWSTR lpFileName) {     char *lpBuf;     HBITMAP hBitmap,hOld ;     HDC hDC,hcDC;     BITMAP bb;     BITMAPINFO b;     HANDLE hp,fh=NULL;     DWORD dwX,dwY;       dwX=GetSystemMetrics(SM_CXSCREEN);     dwY=GetSystemMetrics(SM_CYSCREEN);     hDC=GetDC(NULL);     hcDC=CreateCompatibleDC(hDC);     hBitmap=CreateCompatibleBitmap(hDC,dwX,dwY);     hOld=(HBITMAP)SelectObject(hcDC,hBitmap);     BitBlt(hcDC,0, 0,dwX,dwY, hDC, 0, 0, SRCCOPY);     bb.bmWidth=dwX;     bb.bmHeight =dwY;     bb.bmPlanes = 1;     bb.bmWidthBytes=bb.bmWidth*3;     bb.bmBitsPixel=3;     bb.bmType=0;     b.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);     b.bmiHeader.biWidth        =dwX;     b.bmiHeader.biHeight       =dwY;     b.bmiHeader.biPlanes       =1;     b.bmiHeader.biBitCount     =3*8;     b.bmiHeader.biCompression  =BI_RGB;     b.bmiHeader.biSizeImage    =0;     b.bmiHeader.biXPelsPerMeter=0;     b.bmiHeader.biYPelsPerMeter=0;     b.bmiHeader.biClrUsed      =0;     b.bmiHeader.biClrImportant =0;     b.bmiColors[0].rgbBlue     =8;     b.bmiColors[0].rgbGreen    =8;     b.bmiColors[0].rgbRed      =8;     b.bmiColors[0].rgbReserved =0;     hp=GetProcessHeap();     lpBuf=( char *)HeapAlloc(hp,HEAP_ZERO_MEMORY,bb.bmHeight*bb.bmWidth*4);     GetDIBits(hcDC,hBitmap,0,dwY,lpBuf,&b,DIB_RGB_COLORS);     SaveBitmapToFile(&bb,lpFileName,lpBuf);     ReleaseDC(NULL,hDC);     DeleteDC(hcDC);     DeleteObject(hBitmap);     DeleteObject(hOld);     HeapFree(hp,0,lpBuf);     return true; }     int _tmain(int argc, _TCHAR* argv[]) {             LPCWSTR path = L "E:\\e.bmp";              GetBitmapFromScreen(path);                return 0; }   

标签:NULL,bb,bmiHeader,曲线,bi,生成,BMP,fh,bitmap
From: https://www.cnblogs.com/roak/p/16937991.html

相关文章

  • 能生成BMP
    能生成BMPhttp://bbs.bccn.net/thread-336164-1-1.html   为何该程序生成的BMP图像打不开?? 程序代码: #include<stdio.h>#include<time.h>#include<stdlib.......
  • java 生成图片验证码
    importcn.hutool.cache.CacheUtil;importcn.hutool.cache.impl.TimedCache;importcn.hutool.captcha.CaptchaUtil;importcn.hutool.captcha.CircleCaptcha;import......
  • linux上编译openssl源码生成libcrypto.so库
    linux上编译openssl源码生成libcrypto.so库:第一步:下载OpenSSL源码https://www.openssl.org/source/第二步:解压压缩包tarzxvfopenssl-1.1.1k.tar.gz我的压缩包的目录位置:/......
  • 详解支持向量机-基于SVM的ROC曲线和AUC面积【菜菜的sklearn课堂笔记】
    视频作者:菜菜TsaiTsai链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili手动绘制SVM的ROC曲线对于ROC曲线,我们要注意的是正类的概率和阈......
  • 区间列表的交集 和相同的二元子数组 生成交替二进制字符串的最少操作数
    986.区间列表的交集List<int[]>list=newArrayList<>();intn=firstList.length;intm=secondList.length;inti=0;intj=0;while(i<n&&j<m){交......
  • 最小生成树
    课程小结定义(1)定义生成树:树:N个点,N-1条边的连通图生成树:包含某图G所有点的树一个图G是树当且仅当以下任意一个条件成立G有V-1条边,无环G有V-1条边,连通任意两点......
  • 力扣 leetcode 1758. 生成交替二进制字符串的最少操作数
    问题描述给你一个仅由字符'0'和'1'组成的字符串s。一步操作中,你可以将任一'0'变成'1',或者将'1'变成'0'。交替字符串定义为:如果字符串中不存在相邻两个字......
  • 生成函数
    《组合数学》2.2定义生成函数,也就是母函数,是为了求数列的通项公式。对于数列\(C_0,C_1,C_2,...\),构造函数\[G(x)=C_0x^0+C_1x^1+...\]生成函数和原数列一......
  • 1758. 生成交替二进制字符串的最少操作数
    1758.生成交替二进制字符串的最少操作数给你一个仅由字符'0'和'1'组成的字符串s。一步操作中,你可以将任一'0'变成'1',或者将'1'变成'0'。交替字符串定义......
  • 1758. 生成交替二进制字符串的最少操作数 ---- 位运算、模拟
    给你一个仅由字符'0'和'1'组成的字符串s。一步操作中,你可以将任一'0'变成'1',或者将'1'变成'0'。交替字符串定义为:如果字符串中不存在相邻两个字符相等的情......