J'essaie d'obtenir la taille et le poids d'une image PNG en utilisant des pointeurs vers les deux emplacements dans le fichier PNG.Obtenez la taille et le poids d'une image png
Je lis la mémoire en utilisant read_image()
, mais ce que je reçois de cette façon est largeur: 115200 et hauteur: 115464, mais ma photo a une largeur: 450; hauteur: 451.
Voici mon code:
#include<stdio.h>
#include<stdint.h>
#include<arpa/inet.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
void *read_image(const char *filepath);
int main(int argc, char** argv)
{
char *ptr=read_image(argv[1]);
uint32_t *point1=ptr+17;
uint32_t *point2=ptr+21;
uint32_t point1_res=ntohl(*point1);
uint32_t point2_res=ntohl(*point2);
printf("\nWidth: %d",point1_res);
printf("\nHeight: %d",point2_res);
return 0;
}
void *read_image(char *path) {
int fd = open(path, O_RDONLY);
if (fd < 0) {
return NULL;
}
size_t size = 1000;
size_t offset = 0;
size_t res;
char *buff = malloc(size);
while((res = read(fd, buff + offset, 100)) != 0) {
offset += res;
if (offset + 100 > size) {
size *= 2;
buff = realloc(buff, size);
}
}
close(fd);
return buff;
}
Il n'y a pas de problème avec ma fonction read_image()
, je pense à ntohl()
?
Pourquoi les compensations '17' et' 21'? – alk
à cause de cet exemple d'un fichier png: –
Le 17ème octet que vous obtenez en ajoutant 16 à l'adresse de base. – alk