求大佬看看在bmp截图中的错误 以下为截图

来源:互联网 发布:mac装win7加载驱动程序 编辑:程序博客网 时间:2024/05/16 07:00
#include<string.h>
#include<stdlib.h>
#include"z.h"
#pragma pack(1)
typedef struct tagBITMAPFILEHEADER
{
        unsigned short bfType;
        unsigned long bfSize;
        unsigned short bfReserved1;
        unsigned short bfReserved2;
        unsigned long bfOffBits;
}BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER
{
        unsigned long biSize;
        unsigned long biWidth;
        unsigned long biHeight;
        unsigned short biPlanes;
        unsigned short biBitCount;
        unsigned long biComPression;
        unsigned long   biSizelmage;
        unsigned long   biXPelsPerMeter;
        unsigned long   biYPelsPerMeter;
        unsigned long   biClrUsed;
        unsigned long   biClrlmportant;

}BITMAPINFOHEADER;
int main(int argc,char *argv[]){
        FILE*fp=fopen(argv[1],"rb");
        FILE*newfp=fopen(argv[2],"wb");
        if(fp==NULL||newfp==NULL){
                printf("fopen error!\n");
                exit(1);
        }
        BITMAPFILEHEADER bithead;
 BITMAPINFOHEADER bitinfo;
        memset(&bithead,0,sizeof(BITMAPFILEHEADER));
        memset(&bitinfo,0,sizeof(BITMAPINFOHEADER));
        perror("memset");
        fread(&bithead,1,sizeof(BITMAPFILEHEADER),fp);
        fread(&bitinfo,1,sizeof(BITMAPINFOHEADER),fp);
        perror("fread");
        char*p=(char*)&bithead.bfType;
        if(*p!='B'||*(p+1)!='M'){
                printf("error!\n");
                exit(1);
        }
        //      fwrite(&bithead,1,sizeof(BITMAPFILEHEADER),newfp);
        //      fwrite(&bitinfo,1,sizeof(BITMAPINFOHEADER),newfp);
        unsigned long x0=atoi(argv[3]);
        unsigned long y0=atoi(argv[4]);
        unsigned long x1=atoi(argv[5]);
        unsigned long y1=atoi(argv[6]);
        if(x0>500||y0>306||x1<x0||y1<y0){
                printf("print error!\n");
                exit(1);
        }
        BITMAPFILEHEADER bithead1;
        BITMAPINFOHEADER bitinfo1;
        memset(&bithead1,0,sizeof(BITMAPFILEHEADER));
        memset(&bitinfo1,0,sizeof(BITMAPINFOHEADER));
        char*sp=(char*)&bithead1.bfType;
        *sp='B';
        *(sp+1)='M';
        perror("sp");
        sleep(1);
        bithead1.bfSize=(x1-x0)*(y1-y0)*3+54;
        bithead1.bfOffBits=54;
        bitinfo1.biSize=sizeof(BITMAPINFOHEADER);
        bitinfo1.biWidth=x1-x0;
        bitinfo1.biHeight=y1-y0;
 bitinfo1.biPlanes=1;
        bitinfo1.biBitCount=24;
        fwrite(&bithead1,1,sizeof(BITMAPFILEHEADER),newfp);
        fwrite(&bitinfo1,1,sizeof(BITMAPINFOHEADER),newfp);
        perror("fwrite");
        sleep(1);
        int x,y,color;
        for(y=y0;y<y1;y++)
        {
                 int cnt=(y-1)*bitinfo.biWidth*3+x0*3;
                for(x=x0;x<x1;x++)
                {
                color=gImage_z[cnt]<<16|gImage_z[cnt+1]<<8|gImage_z[cnt+2]<<0;             cnt+=3;
                        fwrite(&color,3,1,newfp);
                        perror("fwrite");

                }
        }
        fclose(fp);
        fclose(newfp);
}


原创粉丝点击