几个星期以来,我一直在努力在C设立一个职能,以便BMP能够轮流提出90度锁定或反锁定。 无论我做些什么,还是我读/换头脑看什么似乎行不通,我甚至试图让大赦国际产生该守则,但似乎没有任何工作,我不知道我做错做什么,或者说我说什么错了。 如果有人失踪,或者如果能比较容易去做,请让我知道。
谢谢。
EDIT:将第二个问题移到这里,然后会 ask问,对此感到担忧。
(ary, s in spanish)
typedef struct
{
unsigned short bm; //tipo de fichero "BM"
unsigned int tam; //tamanyo
unsigned short res1; //reservado
unsigned short res2; //reservado
unsigned int inicio; //inicio datos de imagen
unsigned int head; //tamanyo de la cabecera del bitmap
unsigned int x; //ancho en pixeles
unsigned int y; //alto en pixeles
unsigned short planes; //numero de planos
unsigned short tam_pun; //tamanyo de cada punto
unsigned int comp; //compresion
unsigned int img; //tamanyo imagen
unsigned int r_hor; //resolucion horizontal
unsigned int r_ver; //resolucion vertical
unsigned int t_color; //tamanyo tabla de color
unsigned int impor; //contador de colores importantes
}bmpHeader;
void rotar(FILE *f, int rotar) {
bmpHeader header;
unsigned char *data;
unsigned char *data_rot;
int i, j, k;
// Leer la cabecera del BMP
fread(&header, sizeof(bmpHeader), 1, f);
// Asignar memoria para los datos de la imagen
data = (unsigned char *)malloc(header.img);
data_rot = (unsigned char *)malloc(header.img);
// Leer los datos de la imagen
fread(data, header.img, 1, f);
// Rotar la imagen
if (rotar == 0) {
// Rotar 90 grados a la derecha
for (i = 0; i < header.x; i++) {
for (j = 0; j < header.y; j++) {
k = (header.x - i - 1) * header.y + j;
data_rot[k] = data[i * header.y + j];
}
}
} else {
// Rotar 90 grados a la izquierda
for (i = 0; i < header.x; i++) {
for (j = 0; j < header.y; j++) {
k = i * header.y + (header.y - j - 1);
data_rot[k] = data[i * header.y + j];
}
}
}
// Escribir la cabecera del BMP
fwrite(&header, sizeof(bmpHeader), 1, f);
// Escribir los datos de la imagen
fwrite(data_rot, header.img, 1, f);
// Liberar la memoria
free(data);
free(data_rot);
}