📄 main1.c
字号:
#include "GrTry.c"
typedef struct tagRGBBMP /* 用于读取16B实际图像数据 */
{
UINT16 r:5;
UINT16 g:6;
UINT16 b:5;
} RGBBMP16;
void Dot16(INT16 x, INT16 y, UINT16 color); /* 16B模式画点函数 */
void Dot16(INT16 x, INT16 y, UINT16 color)
{
static UINT8 OldPage = 0;
UINT32 PageAll1, PageAll2;
UINT8 NewPage;
if (x > -1 && x < COLS && y > -1 && y < ROWS)
{
PageAll1 = PageAll2 = (UINT32)y*((UINT32)COLS*2)+((UINT32)x*2);
NewPage = PageAll1 >> 16;
if (NewPage != OldPage)
{
OldPage = NewPage;
SelectPage(NewPage);
}
*((UINT16 far *)(VideoBuffer + PageAll2)) = color;
}
}
int main()
{
INT16 fp;
INT16 i, j;
UINT32 Width, Height, Linebytes;
/* 比较之前的定义 */
UINT16 Buffer[640];
RGBBMP16 RGBBuffer[640];
/*----------------*/
struct REGPACK reg;
InitSVGA(); /* 图形初始化开始 */
SetSVGAMode(TRY640X480X16B); /* 实现图形模式 */
if ((fp = open("16b.bmp", O_RDONLY|O_BINARY)) == -1)
{
printf("can't open the file!");
getch();
return 0;
}
lseek(fp, 18L, SEEK_SET); /* 读取文件宽高 */
read(fp, &Width, 4);
read(fp, &Height, 4);
if (Width%4) /* 拼凑4字节倍数 */
{
Linebytes = Width*2+(4-(Width*2)%4);
}
else
{
Linebytes = Width*2;
}
/*----------由于是高彩-16B,不存在设置调色板一说----------*/
lseek(fp, 54L, SEEK_SET); /* 跳到图像数据区 */
for (i = Height; i > -1; i--)
{
/*read(fp, RGBBuffer, Linebytes); 一次读取一行 */
/*memcpy(Buffer, RGBBuffer, Linebytes);*/
read(fp, Buffer, Linebytes);
for (j = 0; j < Width; j++)
{
Dot16(j, i, Buffer[j]);
}
}
close(fp);
getch();
ExitSVGA(); /* 恢复原始的模式 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -