Un piccolo programmino scritto in C che aggiunge degli effetti speciali alle foto di formato Windows bitmap(“.bmp”).
*Se non avete il programma che converte immagini al formato “.bmp” potete farlo da questo sito.
Primo effetto
Secondo effetto
Codice sorgente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
#include <stdio.h> short bfType; // ID:"BM" struct FILEHEADER{ unsigned int bfSize; //GRANDEZZA DEL FILE(BYTE) short int bfReserved1; short int bfReserved2; unsigned int bfOffBits; //L'INDIRIZZO DOVE INIZIA IMMAGINE } fileHeader; struct INFOHEADER{ unsigned int biSize;//OCCUPA 4BYTE int biWidth; //LARGHEZZA int biHeight; //ALTEZZA short int biPlanes; short int biBitCount;//QUALITA' DELL'IMMAGINE 8,16,24,32 BIT unsigned int biCompression;//MODALITA' DI COMPRESSIONE unsigned int biSizeImage; // TOTALE DEI PIXEL int biXPelsPerMeter; int biYPelsPerMeter; unsigned int biClrUsed;//COLORI UTILIZZATI unsigned int biClrImportant;//COLORI IMPORTANTI } infoHeader; struct pixel { unsigned char r,g,b; } pix[1002]; int main(int argc, char *argv[]) { unsigned int j; int width,flag,i; char buff[16]; //FILE DI LETTURA E SCRITTURA FILE *input=fopen("prova.bmp","rb"),*output=fopen("BUFF.bmp","wb"); printf("*************************************************\n" "* Primo effetto:inserire \"1\" e premere invio *\n" "* Secondo effetto: inserire \"2\" e premere invio *\n" "*************************************************\n" "\n:"); scanf(" %d",&flag); //LETTURA DATI fread(&bfType,sizeof(short),1,input); fread(&fileHeader,sizeof(fileHeader), 1, input); fread(&infoHeader,sizeof(infoHeader), 1, input); fseek(input, fileHeader.bfOffBits , SEEK_SET); width=infoHeader.biWidth; fwrite(&bfType,sizeof(short),1,output); fwrite(&fileHeader,sizeof(fileHeader), 1, output); fwrite(&infoHeader,sizeof(infoHeader), 1, output); fseek(output, fileHeader.bfOffBits , SEEK_SET); while(!feof(input)){ fread(pix,sizeof(pix[0]) * width + 2, 1, input); for ( i = 0 ; i < width ;i++) { if (flag == 1) { //PRIMO EFFETTO pix[i].r = (pix[i].r + pix[i].g + pix[i].b )/3; pix[i].g = pix[i].r; pix[i].b = pix[i].r; }else{ //SECONDO EFFETTO pix[i].r = 0 - pix[i].r; pix[i].g = 0 - pix[i].g; pix[i].b = 0 - pix[i].b; } } fwrite(pix,sizeof(pix[0]) * width + 2, 1, output); } printf("FATTO\n"); //CHIUSURA DEI FILE fclose(input); fclose(output); return 0; } |
Download
*Prima di eseguire il programma rinominare la foto a “prova.bmp”.