Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream> //cout
- #include <stdio.h> //fread(), fseek(), fwrite(), fopen(), fclose()
- #include <Windows.h> //Datentypen DWORD, WORD, long
- #include <conio.h> //getch()
- using namespace std;
- void main() {
- //####reddit_red.bmp####
- long biWidth_reddit, biHeight_reddit; //Breite und Höhe
- WORD biBitCount_reddit; //Farbtiefe
- DWORD biOffBits_reddit; //OffBits
- BYTE *farben_reddit; //Array für Farbwerte
- int bg_reddit; //Bildgröße
- int byteCount_reddit; //Anzahl der Bytes pro Reihe, wird errechnet aus Breite * 3 + 1
- //####moon_empty.bmp####
- long biWidth_moon, biHeight_moon; //Breite und Höhe
- WORD biBitCount_moon; //Farbtiefe
- DWORD biOffBits_moon; //OffBits
- BYTE *header_moon; //Array für Header
- BYTE *farben_moon; //Array für Farben
- int bg_moon; //Bildgröße
- int byteCount_moon; //Anzahl der Bytes pro Reihe, wird errechnet aus Breite * 3
- //####Sonstiges####
- int bpp; //Byte Per Pixel, wird errechnet aus Farbtiefe / 8
- int i = 0, j = 0, k = 0, l = 0; //Laufvariablen
- FILE *pF; //Datei
- //####Einlesen aus reddit_red.bmp####
- pF = fopen("reddit_red.bmp", "rb"); //Binär-lesend öffnen
- if(pF == NULL){
- cout << "Datei konnte nicht geoeffnet werden";
- getch();
- exit(0);
- }
- fseek(pF, 10, SEEK_SET);
- fread(&biOffBits_reddit, sizeof(DWORD), 1, pF); //OffBits einlesen
- fseek(pF, 18, SEEK_SET);
- fread(&biWidth_reddit, sizeof(long), 1, pF); //Breite einlesen
- fread(&biHeight_reddit, sizeof(long), 1, pF); //Höhe einlesen
- fseek(pF, 28, SEEK_SET);
- fread(&biBitCount_reddit, sizeof(WORD), 1, pF); //Farbtiefe einlesen
- bpp = biBitCount_reddit / 8; //Ausrechnen der Byte Per Pixel
- bg_reddit = bpp*(biHeight_reddit+1)*(biWidth_reddit+1); //Ermitteln der Bildgröße; Abmessungen +1, da sonst zu klein.
- byteCount_reddit = (biWidth_reddit+1)*bpp; //Ermittlung der Byteanzahl pro Reihe
- farben_reddit = (BYTE *)malloc(bg_reddit*sizeof(BYTE)); //Speicher für Farben anlegen
- fseek(pF, biOffBits_reddit, SEEK_SET);
- fread(farben_reddit, sizeof(BYTE), bg_reddit, pF); //Einlesen der Farben aller Pixel
- fclose(pF);
- //####Einlesen aus moon_empty.bmp####
- pF = fopen("moon_empty.bmp", "rb"); //Binär-lesend öffnen
- if(pF == NULL){
- cout << "Datei konnte nicht geoeffnet werden";
- getch();
- exit(0);
- }
- fseek(pF, 10, SEEK_SET);
- fread(&biOffBits_moon, sizeof(DWORD), 1, pF); //OffBits einlesen
- fseek(pF, 18, SEEK_SET);
- fread(&biWidth_moon, sizeof(long), 1, pF); //Breite einlesen
- fread(&biHeight_moon, sizeof(long), 1, pF); //Höhe einlesen
- fseek(pF, 28, SEEK_SET);
- fread(&biBitCount_moon, sizeof(WORD), 1, pF); //Farbtiefe einlesen
- if(biBitCount_reddit != biBitCount_moon){ //Überprüfen, ob die Farbtiefen übereinstimmen
- cout << "Farbtiefe stimmt nicht überein. Programm wird beendet.";
- getch();
- exit(0);
- }
- header_moon = (BYTE *)malloc(biOffBits_moon*sizeof(BYTE)); //Speicher für Header anlegen
- fseek(pF, 0, SEEK_SET);
- fread(header_moon, sizeof(BYTE),biOffBits_moon, pF); //Einlesen des Headers
- bg_moon = bpp*(biWidth_moon+1)*(biHeight_moon+1); //Ermitteln der Bildgröße; Abmessungen +1, da sonst zu klein.
- byteCount_moon = biWidth_moon*bpp; //Ermittlung der Byteanzahl pro Reihe
- farben_moon = (BYTE *)malloc(bg_moon*sizeof(BYTE)); //Speicher für Farben anlegen
- fseek(pF, biOffBits_moon, SEEK_SET);
- fread(farben_moon, sizeof(BYTE), bg_moon,pF); //Einlesen der Farben aller Pixel
- fclose(pF);
- //####Routine zum Ersetzen der Bilddaten von moon_empty.bmp durch Bilddaten aus reddit_red.bmp; Filterung der roten Farbe
- for (int i = 70;i < biHeight_reddit+70; i++){ //i=70 um die Höhe zu ändern
- l = byteCount_moon*i+i+210; //Eine Breitenreihe * Höhe + i (um eine Einrückung um einen weiteren Pixel zu verhindern) + 210 (Einrückung von der Seite aus); Standpunkt in Bild moon_empty.bmp
- for(int j = 0; j < byteCount_reddit-3; j += 3){ //Schleife um Farbwerte zu überprüfen und ggf. zu ersetzen
- if(!(farben_reddit[k+j] == 0x00 && farben_reddit[k+j+1] == 0x00 && farben_reddit[k+j+2] == 0xFF)){ //ÜBerprüfen ob Farbe Rot ist
- farben_moon[l+j] = farben_reddit[k+j]; //Standpunkt l + aktuelles zu veränderndes Byte + 210 (Einrückung) = Standpunkt k + aktuelles zu veränderndes Byte
- farben_moon[l+j+1] = farben_reddit[k+j+1]; //+1, da der nächste Byte verändert werden muss (Eine Farbe = Bytes)
- farben_moon[l+j+2] = farben_reddit[k+j+2];
- }
- }
- k += byteCount_reddit; //Standpunkt reddit_red.bmp
- }
- fopen("moon.bmp", "wb"); //Binär-schreibend öffnen
- if(pF == NULL){
- cout << "Datei konnte nicht geoeffnet werden";
- getch();
- exit(0);
- }
- fwrite(header_moon, sizeof(BYTE), biOffBits_moon, pF); //Schreiben des Headers in moon.bmp
- fwrite(farben_moon, sizeof(BYTE), bg_moon, pF); //Schreiben der Bilddaten in moon.bmp
- fclose(pF);
- free(farben_reddit);
- free(header_moon);
- free(farben_moon);
- }
Add Comment
Please, Sign In to add comment