当前位置: 代码迷 >> C语言 >> [BCCNCCode] C源码染色器
  详细解决方案

[BCCNCCode] C源码染色器

热度:471   发布时间:2005-10-21 22:08:00.0
[BCCNCCode] C源码染色器
下载: 一次,即可粘贴至BCCN的发表贴子的 [ HTML ] 编辑框,发表。 注意是[ HTML ] 编辑框。
搜索更多相关的解决方案: BCCNCCode  源码  染色  下载  

----------------解决方案--------------------------------------------------------
此源码由BC-CN论坛C源码染色机染色程序作者:knocker BC-CNCode BUG版 如有差错请见谅
#include <stdio.h> #include <stdlib.h> main() { char *str; char *p; str = (char *)malloc(100); p=str; while( *str++ = getchar() != '\n' ); *(str-1) = '\0'; printf("%s",p); getchar(); }

----------------解决方案--------------------------------------------------------
此源码由BC-CN论坛C源码染色机染色程序作者:knocker
BC-CNCode BUG版 如有差错请见谅

/***********************************************
*******在DOS下显示16位色位图源程序**************
********************************************** */
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
#include<fcntl.h>
#include<bios.h>
#include<dos.h>
#include<io.h>
#include<graphics.h>
#define closegr closegraph

/***********************************************
*************位图文件头结构*********************
********************************************** */
typedef struct
{
int id ;

/*两字节的内容用来识别位图的类型:
'BM' : Windows 3.1x, 95, NT, …
'BA' :OS/2 Bitmap Array
'CI' :OS/2 Color Icon
'CP' :OS/2 Color Pointer
'IC' : OS/2 Icon
'PT' :OS/2 Pointer
注:因为OS/2系统并没有被普及开,所以在编程时,你只需判断第一个标识"BM"就行
*/

long filesize ;

/*用字节表示的整个文件的大小 */

long reserved ;

/*保留,必须设置为0 */

long dataoffset ;

/*从文件开始到位图数据开始之间的数据(bitmap data)之间的偏移量 */

long headersize ;

/*位图信息头(Bitmap Info Header)的长度,用来描述位图的颜色、压缩方法等。下面的长度表示:
28h - Windows 3.1x, 95, NT, …
0Ch - OS/2 1.x
F0h - OS/2 2.x
注:在Windows95、98、2000等操作系统中,位图信息头的长度并不一定是28h,因为微软已经制定出了新的BMP文件格式,其中的信息头结构变化比较大,长度加长。所以最好不要直接使用常数28h,而是应该从具体的文件中读取这个值。这样才能确保程序的兼容性。
*/

long width ;

/*位图的宽度,以象素为单位 */

long height ;

/*位图的高度,以象素为单位 */

int Planes ;

/*位图的位面数(注:该值将总是1) */

int Pixe ;

/*每个象素的位数
1 - 单色位图(实际上可有两种颜色,缺省情况下是黑色和白色。你可以自己定义这两种颜色)
4 - 16 色位图
8 - 256 色位图
16 - 16bit 高彩色位图
24 - 24bit 真彩色位图
32 - 32bit 增强型真彩色位图
*/

long Compression ;

/*压缩说明:
0 - 不压缩 (使用BI_RGB表示)
1 - RLE 8-使用8位RLE压缩方式(用BI_RLE8表示)
2 - RLE 4-使用4位RLE压缩方式(用BI_RLE4表示)
3 - Bitfields-位域存放方式(用BI_BITFIELDS表示)
*/

long bmpDataSize ;

/*用字节数表示的位图数据的大小。该数必须是4的倍数 */

long XPelsPerMeter ;

/*用象素/米表示的水平分辨率 */

long YPelsPerMeter ;

/*用象素/米表示的垂直分辨率 */

long ClrUsed ;

/*位图使用的颜色数。如8-比特/象素表示为100h或者 256 */

long ClrImportant ;

/*指定重要的颜色数。当该域的值等于颜色数时(或者等于0时),表示所有颜色都一样重要 */

}
BMPHEAD ;

BMPHEAD BmpHead ;
char convert[16]=
{
0x0,0x4,0x2,0x6,0x1,0x5,0x3,0x7,0x8,0xc,0xa,0xe,0x9,0xd,0x3,0xf
}
;

/*BMP色彩与VGA色对照表 */
unsigned char*bmp_data ;
int fp ;


/**********************************************
************ BGI初始化函数*********************
********************************************* */
void initgr(void)
{
int gd=DETECT,gm=0 ;

/* 和gd = VGA,gm = VGAHI是同样效果 */

registerbgidriver(EGAVGA_driver);

/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */

initgraph(&gd,&gm,"");
}

/***********************************************
*************位图文件头读取函数*****************
********************************************** */
int read_bmp_head(char*bmp_filename)
{

/*打开位图文件 */

if((fp=open(bmp_filename,O_RDONLY))==-1)
{
printf("%s%s",bmp_filename," is not found.");
return 1 ;
}
read(fp,&BmpHead,sizeof(BMPHEAD));

/*读取BMP文件的信息头 */


/*判断是否是BMP文件 */

if(BmpHead.id!=0x4d42)
{
printf("%s%s","'",bmp_filename,"' is not BMPfile");
return 1 ;
}
return 0 ;
}

/***********************************************
**************纠正宽度函数**********************
********************************************** */
int correct_width(int width)
{
int factual_width ;
if(width%4==0&&(width/4)%2==0);
else while(width%4!=0||(width/4)%2!=0)width++;
factual_width=width ;
return factual_width ;
}

/***********************************************
*************读位图文件并显示函数***************
********************************************** */
void put_bmp(char*bmpfile,int x,int y)
{
int read_bmp_head_return,i,j,d=0,cn ;
bmp_data=(unsigned char*)malloc(BmpHead.bmpDataSize*sizeof(unsigned char));
if((read_bmp_head_return=read_bmp_head(bmpfile))==1)
{
getch();
exit(1);
}
lseek(fp,BmpHead.dataoffset,SEEK_SET);
read(fp,bmp_data,BmpHead.bmpDataSize);

/*读取颜色数据到缓冲区内 */

cn=correct_width(BmpHead.width);
for(i=BmpHead.height;i>0;i--)
for(j=0;j {
putpixel(x+j++,y+i,convert[bmp_data[d]>>4]);

/*用高4位画1个点 */

putpixel(x+j++,y+i,convert[bmp_data[d]&0xf]);

/*用低4位画1个点 */

d++;
}
free(bmp_data);
close(fp);
}

/***********************************************
*************主函数*****************************
********************************************** */
int main(void)
{
initgr();
put_bmp("pix.bmp",320,240);
getch();
closegr();
return 0 ;
}


还是少了关键字struct

----------------解决方案--------------------------------------------------------
不错不错,想问问 比如这个: put_bmp("pix.bmp",320,240); 怎么把数字提取出来?数字的长度是变化的 这个: printf("%s%s","'",bmp_filename,"' is not BMPfile"); 怎样防止被染成 printf("%s%s","'",bmp_filename,"' is not BMPfile"); 一开始就计算引号的排行吗? 看看源代码可以不
----------------解决方案--------------------------------------------------------
不给看,昨天和你猛灌水,代码写得一踏糊涂,正头痛怎么改
----------------解决方案--------------------------------------------------------
见引号就把引号处理完,我的还差个格式化功能,写了一半,全部完成再放代码
----------------解决方案--------------------------------------------------------
太牛拉
这个也能自己编
----------------解决方案--------------------------------------------------------
lz 好强啊~~~~~
----------------解决方案--------------------------------------------------------
忽然流行作这个了,俺也学学HTML作一个。
----------------解决方案--------------------------------------------------------
强!
----------------解决方案--------------------------------------------------------