ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Codigo c


Enviado por   •  4 de Febrero de 2019  •  Prácticas o problemas  •  1.440 Palabras (6 Páginas)  •  92 Visitas

Página 1 de 6

#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

...

Descargar como (para miembros actualizados)  txt (9 Kb)   pdf (49 Kb)   docx (15 Kb)  
Leer 5 páginas más »
Disponible sólo en Clubensayos.com