加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

从C中的位图读取BGR颜色

发布时间:2020-12-16 09:33:28 所属栏目:百科 来源:网络整理
导读:我试图从24位BMP文件中获取RGB值.我正在使用的图像是一个小图像,全部为红色,因此所有像素BGR配置应为B:0 G:0 R:255.我这样做: int main(int argc,char **argv){ principal(); return 0;}typedef struct { unsigned char blue; unsigned char green; unsi
我试图从24位BMP文件中获取RGB值.我正在使用的图像是一个小图像,全部为红色,因此所有像素BGR配置应为B:0 G:0 R:255.我这样做:

int main(int argc,char **argv)
{
    principal();
    return 0;
}

typedef struct {
    unsigned char blue;
    unsigned char green;
    unsigned char red;
} rgb;

typedef struct {
    int ancho,alto;
    rgb *pixeles[MAX_COORD][MAX_COORD];
} tBitmapData;

void principal()
{

    FILE *fichero;
    tBitmapData *bmpdata = (tBitmapData *) malloc(sizeof(tBitmapData));
    rgb *pixel;
    int i,j,num_bytes;
    unsigned char *buffer_imag;
    char nombre[] = "imagen.bmp";
    fichero = fopen(nombre,"r");
    if (fichero == NULL)
            puts("No encontradon");
    else {
            fseek(fichero,18,SEEK_SET);
            fread(&(bmpdata->ancho),sizeof((bmpdata->ancho)),4,fichero);
            printf("Ancho: %dn",bmpdata->ancho);
            fseek(fichero,22,SEEK_SET);
            fread(&(bmpdata->alto),sizeof((bmpdata->alto)),fichero);
            printf("Alto: %dn",bmpdata->alto);
    }

    num_bytes = (bmpdata->alto * bmpdata->ancho * 3);
    fseek(fichero,54,SEEK_SET);
    for (j = 0; j < bmpdata->alto; j++) {
            printf("R   G   B Fila %dn",j + 1);
            for (i = 0; i < bmpdata->ancho; i++) {
                    pixel =
                        (rgb *) malloc(sizeof(rgb) * bmpdata->alto *
                                       bmpdata->ancho * 3);
                    fread(pixel,1,sizeof(rgb),fichero);
                    printf("Pixel %d: B: %3d G: %d R: %d n",i + 1,pixel->blue,pixel->green,pixel->red);
            }
    }
    fclose(fichero);
}

问题是当我打印它们时,第一个像素很好,B:0 G:0 R:255,但是它们开始变为B:0 G:255 R:0,然后变为B:255 G: 0 R:0.如果宽度为10像素,则每10个像素发生一次变化.

解决方法

在 BMP file format中,可以填充每行像素数据,以便向上舍入到4个字节的倍数.

如果你有10个24位像素,那就是30个字节,然后是2个字节的填充.您的代码不会跳过填充.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读