c - C 程序中的文本文件到位图

标签 c bitmap arrays bitmapimage bitmapdata

我是 C 编程新手,我正在尝试编写一个程序来读取文本文件并从中生成黑白 bmp。 我认为我的代码即将完成,但我只得到黑色图像。

我错过了什么或者出了什么问题?

0000000000

0000110000 

0001111000

0011111100

0111111110

1111111111

0111111110

0011111100

0001111000

0000110000

这里是代码:

#include <stdio.h>
#include <strings.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>

 int k = 0;

#pragma pack(1)
    typedef struct{
     uint16_t bfType;
     uint32_t bfSize;
 uint16_t bfReserved1;
 uint16_t bfReserved2;
 uint32_t bfOffBits;
} BMPFH;
#pragma pack()

#pragma pack(1)
typedef struct{
uint32_t biSize;
int32_t biWidth;
int32_t biHeight;
uint16_t  biPlanes;
uint16_t biBitCount;
uint32_t biCompression;
uint32_t bisizeImage;
int32_t biXPelsPerMeter;
int32_t biYPelsPerMeter;
uint32_t biClrUsed;
uint32_t biClrImportant;
} BMIH;
#pragma pack()

#pragma pack(1)
typedef struct {
BMPFH BMPFH;
BMIH BMIH;
} bitmap;
#pragma pack()

int main() {
 FILE * input = fopen("/Users/JosPaduaA/desktop/dibujo1.txt", "r");
        char txt[100];
        int bmp[2400] = {0};
        int j = 0, i = 0;
        fread(txt, 100, 1, input);
        fclose(input);
        while(i < 100){
                if(txt[i] == '1'){
                        for(j = 0; j < 24; j++){
                                bmp[k] = 1;
                                k++;
                        }
                }
                else{
                        k += 24;
                }
        i++;
        }
BMPFH fh;
BMIH ih;
FILE* file = fopen("out.bmp","wb");

memcpy(&fh.bfType,"BM",2);
fh.bfSize = 14+40+320; //ERROR
fh.bfOffBits = 14+40;
fh.bfReserved1 = 0;
fh.bfReserved2 = 0;

ih.biSize = 40;
ih.biWidth = 10;
ih.biHeight = 10;
ih.biPlanes = 1;
ih.biBitCount = 24;
ih.biCompression = 0;
ih.bisizeImage = 0;
ih.biXPelsPerMeter = 0;
ih.biYPelsPerMeter = 0;
ih.biClrUsed = 0;
ih.biClrImportant = 0;

fwrite(&fh,sizeof(fh),1,file);
fwrite(&ih,sizeof(ih),1,file);
unsigned int data_size = fh.bfSize - sizeof(bitmap);
uint8_t *pixelbuffer = (uint8_t*)malloc(data_size);
bitmap *pbitmap  = (bitmap*)calloc(1,sizeof(bitmap));
memset(pixelbuffer, 0, data_size);
fwrite(pixelbuffer, 1, data_size, file);
fclose(file);
free(pixelbuffer);
return 0;
}

最佳答案

这一行:

memset(pixelbuffer, 0, data_size);

将所有像素值设置为 0x00 0x00 0x00 ,即黑色

关于c - C 程序中的文本文件到位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33578806/

相关文章:

c# - Json.net 仅序列化数组的一部分

java - 如何使用Java在数据库中存储日期数组?

c - 无法从客户端连接到套接字

android - 将图像加载到位图对象时出现奇怪的 OutOfMemory 问题

c - 即使满足条件,C 中的“if”语句也不会执行

java - 在我重新启动手机之前,图像不会显示在照片应用程序中

android - 如何将 Bitmap 转换为 Drawable?

javascript - 具有最大数字索引的元素

c - 我必须按两次CTRL+D才能结束输入,为什么?如何更正?

c - 在 C 中标记用户输入(存储在 **arg 中)?