c - 尝试将数据从 bmp 文件复制到文本文件

标签 c copy bmp

我试图将像素数据从 bmp 文件复制到 c 中的文本文件(白色将为 0,所有其他颜色将为 1),但由于某种原因,文本文件出现了三倍(1 的三个区域)和在错误的方向,我无法弄清楚为什么。无论如何这是我的scipt:

#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>
#pragma pack(1)
typedef struct {
unsigned char type1;                 /* Magic identifier            */
unsigned char type2;
unsigned int size;                       /* File size in bytes          */
unsigned int reserved;
unsigned long offset;                     /* Offset to image data, bytes */
} Header;
#pragma pack(2)
typedef struct {
unsigned int size;               /* Header size in bytes      */
int width,height;                /* Width and height of image */
unsigned short int planes;       /* Number of colour planes   */
unsigned short int bits;         /* Bits per pixel            */
unsigned int compression;        /* Compression type          */
unsigned int imagesize;          /* Image size in bytes       */
unsigned int xresolution,yresolution;     /* Pixels per meter          */
unsigned int ncolours;           /* Number of colours         */
unsigned int importantcolours;   /* Important colours         */
} Infoheader;

typedef struct
{   unsigned char Red, Green, Blue,Reserved;
} Pixel;


void main()
{
int n;
FILE *fin;
Header *fileheader;
Infoheader *information;
Pixel *ppixel,**pImage;
fin=fopen("TEST_web.bmp","rb");
    if (fin==NULL)
    {
    printf("Error reading image\n");
    exit(1);
    }
int i,j;
fileheader=(Header *)malloc(sizeof(Header));
information=(Infoheader *)malloc(sizeof(Infoheader));
ppixel=(Pixel *)malloc(sizeof(Pixel));
fread(fileheader,sizeof(Header),1,fin);
    if ((*fileheader).type1!='B'&&(*fileheader).type2!='M')
    {
    printf("Not a bmp file\n");
    exit(1);
    }
n=fread(information, sizeof(Infoheader),1,fin);
    if(n!=1)
    {
    printf("Error reading image information\n");
    exit(1);
    }
pImage = (Pixel **)malloc(sizeof(Pixel *) * information->height);
    for(i = 0; i < information->height; i++)
    {   pImage[i] = (Pixel *)malloc(sizeof(Pixel) * information->width);
    }
fseek(fin,fileheader->offset,SEEK_SET);
    for(i = 0; i < information->width; i++)

    {   for(j = 0; j < information->height; j++)

    {   fread(&(*ppixel).Red, sizeof(unsigned char), 1, fin);

        fread(&(*ppixel).Green, sizeof(unsigned char), 1, fin);

        fread(&(*ppixel).Blue, sizeof(unsigned char), 1, fin);


        pImage[i][j] = *ppixel;

    }

}
char data[information->width][information->height];
        for(i = 0; i <information->width; i++)

        {   for(j= 0; j<information->height; j++)

            {   
                if((pImage[i][j]).Red==255&&(pImage[i][j]).Green==255&& Image[i][j]).Blue==255)
                data[i][j]='0';
                else
                data[i][j]='1';
            }
        }
FILE *fout;
fout=fopen("text.txt","wt");

for(i = 0; i < information->width; i++)

{   for(j = 0; j < information->width ; j++)

    {             fputc(data[i][j],fout);



}
fputs("\n",fout);
}

free(fileheader);
free(information);
free(ppixel);
for(i = 0; i < information->height; i++)
    free(pImage[i]);
fclose(fin);

Im working for now with this picture

最佳答案

取而代之的是:

for(i = 0; i < information->width; i++)    
{
    for(j = 0; j < information->height; j++)   

使用这样的东西:

for(y = 0; y < information->height; y++)    
{
    for(x = 0; x < information->width; x++)   

(当然在扫描位图时也这样做。)

关于c - 尝试将数据从 bmp 文件复制到文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28324706/

相关文章:

c++ - 在 C 中查询 A 记录

c - 指针新手试图找出为什么我的链接列表实现不起作用

copy - ActiveSheet.Paste 类型(仅粘贴值)

arrays - 如何在 Bash 中复制数组?

java - 在 Java 中复制对象

c - 静态动态内存是否会在程序结束时自动释放?

链接的宏调用。括号中的参数有不同的处理方式吗?

iOS : converting png image to 1 bit bmp images

c++ - 创建 BMP 文件

C# - 删除位图填充