粉红喵喵拳 发表于 2021-1-30 22:43:08

求助,字符画无法正常显示

如题,就左右错位画对不上位置,字符和视频的内容对不上
提取码:cs0c
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<time.h>
BITMAPFILEHEADER fileHead;      //文件信息头
BITMAPINFOHEADER infoHead;      //位图信息头
RGBQUAD pColorTable;       //颜色表指针
unsigned char *pBmpBuf;         //图像数据指针
int bmpWidth;          //图像的宽
int bmpHeight;      //图像的高
int biBitCount;       //每像素位数
int lineByte;         //每行的字节数
unsigned char a;
unsigned char *Pre = NULL;
char *out;
char info[] = {"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^` ."};//根据字符的复杂到简单排列
int len ,reg = 1;
clock_t stime,ftime,ltime,lt;


#define name "picture\\wrxq"
#define frame 7196//总帧数

//还可以通过控制Print函数中打印的行数以及列数来控制更新速率
#define clearDegree 2 //隔几帧读一次
#pragma comment(lib, "WINMM.LIB")



int Read(const char *bmpName);
int Run(const char *bmpName);   /*函数原型*/
void Print();
void Pos(int x, int y);



int main(int argc, char *argv[])
{
        out = (char *)malloc(sizeof(char) * 40000);
        system("mode con cols=4000 lines=4000");
        system("color F0");
       
        len = strlen(info) - 1;
        Run(name);
        free(out);
        return 0;
}

int Run(const char *bmpName)
{
        register int i;
        int count = 0,temp = frame;
        char path = "\0";
        char format;
        while(temp > 0)
        {
                ++count;
                temp /= 10;
        }
        sprintf(format,"%s%dd%s","%s%0",count,"%s");
        PlaySound("wrxq.wav", NULL, SND_FILENAME | SND_ASYNC);
        stime = lt = clock();
        printf("%ld",stime);
        for(i = 0;i < frame;)
        {
                        if(i % 30 == 0)
                {
                        reg = 94;
                }
                ftime = clock();
                if((ftime - stime) >= reg)
                {
                        reg =95;
                        path = '\0';
                        sprintf(path,format,bmpName,i,".BMP");
                        i+=3;
                        stime = ftime;
                        Read(path);
                        Print();
                }
        }
        ltime = clock();

        if(Pre)
                free(Pre);
        system("cls");
        return 0;
}
void Print()
{
        int i,j;
        int x = 0;
        Pos(0,0);
        for(i = 17;i < bmpHeight - 17;++i)
        {
                if(i % clearDegree != 0)
                        continue;
                for(j = 0;j < bmpWidth;++j)
                        out = info[(int)(a/256.0*len)];
                out = '\n';       
        }
        out = '\0';
        printf("%s",out);
}
int Read(const char *bmpName)
{
        FILE *fp = fopen(bmpName,"rb");            /*二进制读方式打开指定的图像文件*/
        register int i,j;
        unsigned char * pix = NULL;
        if(fp==NULL)
                return 0;
        fread(&fileHead,sizeof(BITMAPFILEHEADER),1,fp);    /*读文件信息头*/
        fread(&infoHead,sizeof(BITMAPINFOHEADER),1,fp);    /*读位图信息头*/
        bmpWidth=infoHead.biWidth;   /*获取图像宽,高,每像素所占位数等信息 */
        bmpHeight=infoHead.biHeight;
        biBitCount=infoHead.biBitCount;
        lineByte=(bmpWidth*biBitCount/8+3)/4*4;    /*计算每行字节数(必须是4的倍数)*/

        if(Pre == NULL)
        {
                pix=(unsigned char *)malloc(lineByte+1);
                Pre = pix;
        }
        else
                pix = Pre;
        if(pix == NULL)
                return 0;
        for(i = 0;i < bmpHeight;++i)
        {
                fread(pix,1,lineByte,fp);
                for(j = 0;j < bmpWidth;++j)
                {
                        a = (int)((unsigned char)(pix * 0.3 + pix * 0.59 + pix * 0.11));
                }
        }
        fclose(fp);
        return 0;
}

void Pos(int x, int y)//设置光标位置
{//要注意这里的x和y与我们数组的x和y是反的
        COORD pos;
        HANDLE hOutput;
        pos.X = x;
        pos.Y = y;
        hOutput = GetStdHandle(STD_OUTPUT_HANDLE);//返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄
        SetConsoleCursorPosition(hOutput, pos);
}

粉红喵喵拳 发表于 2021-1-30 22:44:56

使用的是Visual C++ 6.0编译环境,win10系统
页: [1]
查看完整版本: 求助,字符画无法正常显示