/****************************************************************************
函数主要功能是在TC的全屏模式下实现截图,因为printscreen键在全屏模式下不能实现截图功能
*****************************************************************************/
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <math.h>
#include <stdarg.h>
#include <fcntl.h>
#include <malloc.h>
#include <io.h>
typedef unsigned char ONEBYTE; /*定义ONEBYTE为一个字节的类型*/
typedef unsigned short ONEWORD; /*定义ONEWORD为两个字节的类型*/
typedef unsigned long DOUWORD; /*定义DOUWORD为四个字节的类型*/
/*位图文件头*/
typedef struct BMP_FILE_HEADER
{
ONEWORD bType; /* 文件标识符 */
DOUWORD bSize; /* 文件的大小 */
ONEWORD bReserved1; /* 保留值,必须设置为0 */
ONEWORD bReserved2; /* 保留值,必须设置为0 */
DOUWORD bOffset; /* 文件头到图像数据位开始的偏移量 */
} BMPFILEHEADER;
/*位图信息头*/
typedef struct BMP_INFO_HEADER
{
DOUWORD bInfoSize; /* 信息头的大小 */
DOUWORD bWidth; /* 图像的宽度 */
DOUWORD bHeight; /* 图像的高度 */
ONEWORD bPlanes; /* 图像的位面数 */
ONEWORD bBitCount; /* 每个像素的位数 */
DOUWORD bCompression; /* 压缩类型 */
DOUWORD bmpImageSize; /* 图像的大小,以字节为单位 */
DOUWORD bXPelsPerMeter; /* 水平分辨率 */
DOUWORD bYPelsPerMeter; /* 垂直分辨率 */
DOUWORD bClrUsed; /* 使用的色彩数 */
DOUWORD bClrImportant; /* 重要的颜色数 */
} BMPINFOHEADER;
/*彩色表*/
typedef struct RGB_QUAD
{
ONEBYTE rgbBlue; /* 蓝色强度 */
ONEBYTE rgbGreen; /* 绿色强度 */
ONEBYTE rgbRed; /* 红色强度 */
ONEBYTE rgbReversed; /* 保留值 */
} RgbQUAD;
/*像素点RGB颜色*/
typedef struct
{
ONEBYTE blue;
ONEBYTE green;
ONEBYTE red;
} BMPCOLOR;
BMPCOLOR **bcdata;
BMPFILEHEADER bf;
BMPINFOHEADER bi;
long GetRValue(long rgbColor)
{
return rgbColor&0xFF;
}
long GetGValue(long rgbColor)
{
return (rgbColor&0xFF00)/0xFF;
}
long GetBValue(long rgbColor)
{
return (rgbColor&0xFF0000)/0xFF00;
}
void savebmp(char *filename)
{
int i,j,k,increment,block,maxx,maxy;
DOUWORD LineBytes;
FILE *fp;
if((fp=fopen(filename,"wb"))==NULL)
{
printf("cannot create bmp!");
exit(0);
}
maxx = getmaxx();
maxy = getmaxy();
bi.bWidth=(DOUWORD)(maxx+1);
bi.bHeight=(DOUWORD)(maxy+1);
LineBytes=(DOUWORD)((bi.bWidth*sizeof(BMPCOLOR)+3)/4*4);
bi.bInfoSize= (DOUWORD)sizeof(BMPINFOHEADER);
bi.bmpImageSize=(DOUWORD)(LineBytes*bi.bHeight);
bi.bPlanes=1;
bi.bBitCount=24;
bi.bCompression=0;
bi.bXPelsPerMeter=0;
bi.bYPelsPerMeter=0;
bi.bClrUsed=0;
bi.bClrImportant=0;
bf.bType=0x4D42;
bf.bSize=(DOUWORD)(sizeof(BMPFILEHEADER)+sizeof(BMPINFOHEADER)+bi.bmpImageSize);
bf.bReserved1=0;
bf.bReserved2=0;
bf.bOffset=(DOUWORD)(sizeof(BMPFILEHEADER)+sizeof(BMPINFOHEADER));
fwrite((BMPFILEHEADER *)&bf,sizeof(BMPFILEHEADER),1,fp);
fwrite((BMPINFOHEADER *)&bi,sizeof(BMPINFOHEADER),1,fp);
block=10; /*分块*/
increment=bi.bHeight/block; /* 每块高度*/
for(k=0;k<block;k++)
{
bcdata=(BMPCOLOR**)malloc(increment*sizeof(BMPCOLOR*));
for(i=maxy-increment*k;i>=maxy-increment*(k+1)+1;i--) /*像素类型*/
{
bcdata[i]= (BMPCOLOR*)malloc(LineBytes); /*bi.bWidth*sizeof(BMPCOLOR)*/
for(j=0;j<=maxx;j++) /*bi.bWidth-1 不一定等于maxx */
{
if(getpixel(j,i)>0)
{
bcdata[i][j].red=255; /*GetRValue(getpixel(j,i));*/
bcdata[i][j].green=255;/*GetGValue(getpixel(j,i));*/
bcdata[i][j].blue=255;/*GetBValue(getpixel(j,i));*/
}
else
{
bcdata[i][j].red=0;
bcdata[i][j].green=0;
bcdata[i][j].blue=0;
}
}
fwrite((BMPCOLOR*)bcdata[i],LineBytes,1,fp); /*写的是字节*/
free(bcdata[i]);
}
free(bcdata);
}
fclose(fp);
}
没有合适的资源?快使用搜索试试~ 我知道了~
TC全屏模式下的截图(TURBO C)
共1个文件
h:1个
需积分: 10 50 下载量 124 浏览量
2010-06-21
17:43:22
上传
评论
收藏 2KB RAR 举报
温馨提示
做课程设计的时候,由于WINTC在全屏模式下不能用printscreen键实现截图功能,所以就自己写了一个截图函数,定义在savebmp.h中,函数名为savebmp 直接在main里调用就OK了
资源推荐
资源详情
资源评论
收起资源包目录
savebmp.rar (1个子文件)
savebmp.h 4KB
共 1 条
- 1
资源评论
stream80
- 粉丝: 7
- 资源: 105
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功