0
Hello, I am with a work of the faculty on steganography and one of the requirements is to read an image in the format bitmap (bmp), however, I have already searched a lot in the internet and the information that exist are the same on this subject, I’m not sure what I should put on to read the image correctly, I’m in need of help to understand. Below is a part of what has already been done
NOTE: This is the "readImagemBMP. h" file of the code
#ifndef LERIMAGEMBMP__
#define LERIMAGEMBMP__
/*Define o cabeçalho da imagem com o formato BMP*/
typedef struct {
char formato[2]; //Especifica o formato da imagem bmp
int tambytes; //Define o tamanho em Bytes da imagem
short int reservado1;
short int reservado2;
int numbytesdeslocado;
} HEADERARQUIVO;
/*Estrutura que define as propriedades da imagem BMP*/
typedef struct{
int tamanhoCabecalho;
int largura; // Define a largura da imagem
int altura; // Define a altura da imagem
short int qualiPlanos;
short int bitsPixel;
int compressao;
int tamanhoImagem;
int horizontal;
int vertical;
int numPaletaCores;
int numCoresImportantes;
} HEADERIMAGEM;
typedef struct {
unsigned char r;
unsigned char g;
unsigned char b;
unsigned char reservado;
} PALETA;
/*Cabeçalho da função que será
responsável por ler a imagem no formato BMP*/
void ler_imagem_bmp(FILE *img_orig, FILE *img_copia_bmp);
#endif
**OBS: ESSE É O arquivo .c do código**
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "lerImagemBMP.h"
void ler_imagem_bmp(FILE *img_orig, FILE *img_copia_bmp){
char *nomeArquivobmp;
char *copiaArquivobmp;
nomeArquivobmp = malloc(25 * sizeof(char));
copiaArquivobmp = malloc(25 * sizeof(char));
PALETA **Matriz;
int i, j;
printf("Informe o nome do arquivo a ser lido:\n");
scanf("%s", nomeArquivobmp);
img_orig = fopen(nomeArquivobmp, "rb");
if(img_orig == NULL){
fprintf(stderr, "ERRO AO TENTAR ABRIR O ARQUIVO %s\n", nomeArquivobmp);
}
HEADERARQUIVO cabecalho;
HEADERIMAGEM imagem;
fscanf(img_orig, "%s", cabecalho.formato);
if(strcmp(cabecalho.formato, "BM") != 0){
fprintf(stderr, "O FORMATO DA IMAGEM NÃO É BMP\n");
fclose(img_orig);
}
fscanf(img_orig, "%d", &cabecalho.tambytes);
fscanf(img_orig, "%hu", &cabecalho.reservado1);
fscanf(img_orig, "%hu", &cabecalho.reservado2);
fscanf(img_orig, "%d", &cabecalho.numbytesdeslocado);
fscanf(img_orig, "%d", &imagem.tamanhoCabecalho);
fscanf(img_orig, "%d", &imagem.largura);
fscanf(img_orig, "%d", &imagem.altura);
fscanf(img_orig, "%hu", &imagem.bitsPixel);
fscanf(img_orig, "%d", &imagem.tamanhoImagem);
fscanf(img_orig, "%d", &imagem.horizontal);
fscanf(img_orig, "%d", &imagem.vertical);
fscanf(img_orig, "%d", &imagem.numPaletaCores);
fscanf(img_orig, "%d", &imagem.numCoresImportantes);
fprintf(img_copia_bmp, "%s%d%d%d", cabecalho.formato, cabecalho.tambytes, cabecalho.reservado1, cabecalho.reservado2);
fprintf(img_copia_bmp, "%d%d%d%d%d", cabecalho.numbytesdeslocado, imagem.tamanhoCabecalho, imagem.largura, imagem.altura, imagem.bitsPixel);
fprintf(img_copia_bmp, "%d%d%d%d%d", imagem.tamanhoImagem, imagem.horizontal, imagem.vertical, imagem.numPaletaCores, imagem.numCoresImportantes);
Matriz = (PALETA**) malloc(imagem.largura * sizeof(PALETA*));
for(i=0; i<imagem.largura; i++){
Matriz[i] = (PALETA*) malloc(imagem.altura * sizeof(PALETA));
for(j=0; j<imagem.altura; j++){
fscanf(img_orig, "%c%c%c", &Matriz[i][j].r, &Matriz[i][j].g, &Matriz[i][j].b);
}
}
for(i=imagem.largura; i<=0; i--){
for(j=0; j<imagem.altura; j++){
fprintf(img_copia_bmp, "%c%c%c", Matriz[i][j].r, Matriz[i][j].g, Matriz[i][j].b);
}
}
fclose(img_orig);
fclose(img_copia_bmp);
}
Friend, you need to be more specific about what exactly you don’t understand. This makes it difficult to understand how to help you. It will be difficult for someone to post a tutorial explaining step by step how to do it, as it is not the purpose of the site. I’ll leave you one more tip, however you need to start your code and point out where you don’t understand or what your specific difficulty is. https://stackoverflow.com/questions/14279242/read-bitmap-file-into-structure
– MagicHat