⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main2.c

📁 如何编写自己的图形开发包 利用tc2.0在DOS下编写一个功能完整的图形开发包。并有详细浅显的文章耐心逐步讲解。
💻 C
字号:
#include "GrTry.c"


typedef struct tagRGBBMP     /* 用于读取24B实际图像数据               */
{
    UINT8   r;
    UINT8   g;
    UINT8   b;
} RGBBMP24;



void Dot24(INT16 x, INT16 y, UINT32 *color);     /* 24B模式画点函数    */
void Dot24(INT16 x, INT16 y, UINT32 *color)
{
    static  UINT8 OldPage = 0;
    UINT32  PageAll1, PageAll2;
    UINT8   NewPage;
    RGBBMP24 k;

    if (x > -1 && x < COLS && y > -1 && y < ROWS)
    {
        PageAll1 = PageAll2 = (UINT32)y*((UINT32)COLS*4)+((UINT32)x*4);
        NewPage = PageAll1 >> 16;
        if (NewPage != OldPage)
        {
            OldPage = NewPage;
            SelectPage(NewPage);
        }


        *((UINT32 far *)(VideoBuffer + PageAll2)) = *color;
    }
}



int main()
{
    INT16   fp;
    INT16   i, j;
    UINT32  Width, Height, Linebytes;

    /* 比较之前的定义 */
    RGBBMP24    RGBBuffer[640];
    /*----------------*/

    struct  REGPACK reg;


    InitSVGA();                     /* 图形初始化开始   */
    SetSVGAMode(TRY640X480X24B);    /* 实现图形模式     */


    if ((fp = open("24b.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*3+(4-(Width*3)%4);
    }
    else
    {
        Linebytes = Width*3;
    }


    /*----------由于是高彩-24B,不存在设置调色板一说----------*/
    lseek(fp, 54L, SEEK_SET);       /* 跳到图像数据区   */
    for (i = Height; i > -1; i--)
    {
        read(fp, RGBBuffer, Linebytes); /* 一次读取一行     */
        for (j = 0; j < Width; j++)
        {
            Dot24(j, i, (UINT32 *)&RGBBuffer[j]);
        }
    }
    close(fp);


    getch();
    ExitSVGA();                     /* 恢复原始的模式   */
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -