qq_44882950 2019-04-10 14:56 采纳率: 0%
浏览 323
已采纳

求助大佬 ,,,,如何将以下程序生成的图片转换成bmp格式。

图片说明

#include
#include

const int POINTNUM = 6;

typedef struct XET
{
float x;
float dx, ymax;
XET* next;
}AET, NET;

struct point
{
float x;
float y;
}

polypoint[POINTNUM] = { 20,30,70,10,130,50,130,110,70,70,20,90,};

void PolyScan()
{
int MaxY = 0;
int i;
for (i = 0; i < POINTNUM; i++)
{
if (polypoint[i].y > MaxY)
MaxY = polypoint[i].y;
}

AET *pAET = new AET;
pAET->next = NULL;

NET *pNET[1024];
for (i = 0; i <= MaxY; i++) 
{
    pNET[i] = new NET;
    pNET[i]->next = NULL;
}
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1, 0, 1);
glBegin(GL_POINTS);


for (i = 0; i < MaxY; i++)              //扫描建立NET表
{
    for (int j = 0; j < POINTNUM; j++) 
    {
        if (polypoint[j].y == i)
        {
            if (polypoint[(j - 1 + POINTNUM) % POINTNUM].y > polypoint[j].y)
            {
                NET *p = new NET;
                p->x = polypoint[j].x;
                p->ymax = polypoint[(j - 1 + POINTNUM) % POINTNUM].y;
                p->dx = (polypoint[(j - 1 + POINTNUM) % POINTNUM].x - polypoint[j].x) / (polypoint[(j - 1 + POINTNUM) % POINTNUM].y - polypoint[j].y);
                p->next = pNET[i]->next;
                pNET[i]->next = p;
            }
            if (polypoint[(j + 1 + POINTNUM) % POINTNUM].y > polypoint[j].y)
            {
                NET *p = new NET;
                p->x = polypoint[j].x;
                p->ymax = polypoint[(j + 1 + POINTNUM) % POINTNUM].y;
                p->dx = (polypoint[(j + 1 + POINTNUM) % POINTNUM].x - polypoint[j].x) / (polypoint[(j + 1 + POINTNUM) % POINTNUM].y - polypoint[j].y);
                p->next = pNET[i]->next;
                pNET[i]->next = p;
            }
        }
    }
}
for (i = 0; i <= MaxY; i++)    //建立更新活性边表
{
    NET *p = pAET->next;
    while (p) 
    {
        p->x = p->x + p->dx;
        p = p->next;
    }


    AET *tq = pAET;             //AET按照X值从小到大排序
    p = pAET->next;
    tq->next = NULL;
    while (p)
    {
        while (tq->next && p->x >= tq->next->x)
            tq = tq->next;
        NET *s = p->next;
        p->next = tq->next;
        tq->next = p;
        p = s;
        tq = pAET;
    }


    AET *q = pAET;              //从AET中删除ymax == i的结点
    p = q->next;
    while (p) 
    {
        if (p->ymax == i) 
        {
            q->next = p->next;
            delete p;
            p = q->next;
        }
        else
        {
            q = q->next;
            p = q->next;
        }
    }


    p = pNET[i]->next;          //将NET中的新点加入AET,并用插入法按X值递增排序
    q = pAET;
    while (p)
    {
        while (q->next && p->x >= q->next->x)
            q = q->next;
        NET *s = p->next;
        p->next = q->next;
        q->next = p;
        p = s;
        q = pAET;
    }


    p = pAET->next;               //颜色填充         
    while (p && p->next)
    {
        for (float j = p->x; j <= p->next->x; j++) 
        {
            glVertex2i(static_cast<int>(j), i);
        }
        p = p->next->next;
    }
}
glEnd();
glFlush();

}

void init()
{
glClearColor(1.0, 1.0, 1.0, 1.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0, 200,0,200);

}

int main(int argc, char* argv)
{
glutInit(&argc, &argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(0, 0);
glutInitWindowSize(800,800);
glutCreateWindow(" OpenGL ");

init();
glutDisplayFunc(PolyScan);
glutMainLoop();

}

  • 写回答

2条回答

  • 泡视界 2019-04-10 16:33
    关注

    朋友,我最近刚做了YUV转BMP的程序,
    BMP有文件头和文件数据两部分。你需要通过才程序中写好文件头,通过文件写入,把文件头信息写入.BMP,再把你的图片数据紧接着写进去就行。
    文件头分为3部分,通常只是用两部分,包含了文件大小信息,以及数据区域位置信息等。
    数据部分BMP存储的是RGB的信息,你需要对你的数据进行相应的调整。

    一下是我参考的很有用的几篇博文
    https://blog.csdn.net/a_txpt_001/article/details/26748697
    https://blog.csdn.net/kupepoem/article/details/43307387

    最终我是用的ofstream实现的,没用f.write.

    此外我看你用到了 OpenGL ,想省事的话可以查查有没有相关函数实现你想做的东西

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘