Codigo c
Enviado por Roberto Godinez Robles • 4 de Febrero de 2019 • Práctica o problema • 1.440 Palabras (6 Páginas) • 116 Visitas
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
struct Cabesera {
unsigned char bm[2];
unsigned int Tamano;
unsigned int Ancho;
unsigned int Alto;
};
struct Pixel {
unsigned char B;
unsigned char G;
unsigned char R;
};
void Gris(FILE* Archivo);
void GiroIzq(FILE* Archivo);
void Raya(FILE* Archivo);
void Linea(FILE* Archivo);
void GiroDer(FILE* Archivo);
void GrisMitad(FILE* Archivo);
int main (){
struct Cabesera img;
int opc =0;
FILE* Archivo;
Archivo = fopen("Imagen.bmp","rb+");
if (Archivo==NULL){
printf("No se encontro el archivo\n");
}
else {
fseek(Archivo,0,SEEK_SET);
fread(&img.bm[0], sizeof (char),1, Archivo);
fread(&img.bm[1],sizeof (char),1, Archivo);
fseek(Archivo,18,SEEK_SET);
fread(&img.Ancho, sizeof (int),1, Archivo);
fread(&img.Alto, sizeof (int), 1, Archivo);
printf("EL Tipo del archivo es: %c%c\n",img.bm[0],img.bm[1]);
printf("La ancho y la altura del archivo es: %u, %u\n",img.Ancho,img.Alto);
printf("\n1. Cambiar a gris");
printf("\n2. Girar la imagen hacia la izquierda");
printf("\n3. Dibujar una diagonal");
printf("\n4. Dibujar una linea");
printf("\n5. Girar la imagen hacia la derecha");
printf("\n6. Mitad gris\n")
scanf("%d", &opc);
switch (opc){
case 1:
Gris(Archivo);
break;
case 2:
GiroIzq(Archivo);
break;
case 3:
Raya(Archivo);
break;
case 4:
Linea(Archivo);
break;
case 5:
GiroDer(Archivo);
break;
case 6:
GrisMitad(Archivo);
break;
}
}
return 0;
}
void Gris(FILE* Archivo) {
int Ancho;
int Alto;
fseek(Archivo, 18,SEEK_SET);
fread(&Ancho, sizeof (int),1, Archivo);
fread(&Alto, sizeof (int),1, Archivo);
struct Pixel Planta[Alto] [Ancho];
unsigned char Punt;
int x,y;
fseek(Archivo, 54, SEEK_SET);
for (x=0;x<Alto;x++){
for(y=0;y<Ancho;y++){
fread(&Planta[x][y].B, sizeof(char),1,Archivo);
fread(&Planta[x][y].G, sizeof(char),1, Archivo);
fread(&Planta[x][y].R, sizeof (char),1, Archivo);
//printf("[%d][%d] B: %d\n",x,y,Planta[x][y].B); para saber si esta leyendo la imagen
//printf("[%d][%d] G: %d\n",x,y,Planta[x][y].G);
//printf("[%d][%d] R: %d\n",x,y,Planta[x][y].R);
//printf("\n\n");
}
//system("pause");
}
int i,j;
fseek(Archivo, 54, SEEK_SET);
for(i=0;i<Alto;i++){
for(j=0;j<Ancho;j++){
Punt = Planta[i][j].R*0.3+ Planta[i][j].G*0.59+ Planta[i][j].B*0.11;
fwrite(&Punt, sizeof (char),1, Archivo);
fwrite(&Punt,sizeof (char),1, Archivo);
fwrite(&Punt, sizeof (char),1, Archivo);
}
}
printf("Archivo gris listo :3");
fclose(Archivo);
}
void GiroIzq(FILE* Archivo){
int Ancho;
int Alto;
int Auxiliar;
fseek(Archivo, 18, SEEK_SET);
fread(&Ancho, sizeof(int),1, Archivo);
fread(&Alto, sizeof (int),1, Archivo);
struct Pixel Planta[Alto][Ancho];
Auxiliar = Ancho;
Ancho = Alto;
Alto = Auxiliar;
printf("ancho : %d alto : %d", Ancho,Alto);
fseek(Archivo, 18, SEEK_SET);
fwrite(&Ancho, sizeof (int), 1, Archivo);
fwrite(&Alto, sizeof (int), 1, Archivo);
//reescribiendo la imagen
int a,b;
fseek(Archivo,54, SEEK_SET);
for (a=0;a<Ancho;a++){
for(b=0;b<Alto;b++){
fread(&Planta[a][b].B, sizeof (char),1,Archivo);
fread(&Planta[a][b].G, sizeof(char),1,Archivo);
fread(&Planta[a][b].R,sizeof(char),1, Archivo);
}
}
//leyendo pixelers
int i,j;
fseek(Archivo, 54, SEEK_SET);
for (i= 0;i<Alto;i++){
for(j=0;j<Ancho;j++){
fwrite(&Planta[Ancho-j-1][i].B, sizeof (char),1, Archivo);
fwrite(&Planta[Ancho-j-1][i].G, sizeof (char), 1, Archivo);
fwrite(&Planta[Ancho-j-1][i].R, sizeof (char), 1, Archivo);
}
}
fclose(Archivo);
}
void Raya (FILE* Archivo) {
int Ancho;
int Alto;
fseek(Archivo, 18, SEEK_SET);
fread(&Ancho, sizeof (int), 1, Archivo);
fread(&Alto, sizeof (int), 1, Archivo);
struct Pixel Planta[Alto][Ancho];
int a, b;
fseek(Archivo, 54, SEEK_SET);
for (a=0;a<Alto;a++){
for(b=0;b<Ancho;b++){
fread(&Planta[a][b].B, sizeof (char),1, Archivo);
fread(&Planta[a][b].G, sizeof (char),1, Archivo);
fread(&Planta[a][b].R, sizeof (char),1, Archivo);
}
}
//leyendo
...