Guest User

Untitled

a guest
Jan 12th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.98 KB | None | 0 0
  1. #include <iostream> //cout
  2. #include <stdio.h> //fread(), fseek(), fwrite(), fopen(), fclose()
  3. #include <Windows.h> //Datentypen DWORD, WORD, long
  4. #include <conio.h> //getch()
  5.  
  6. using namespace std;
  7.  
  8. void main() {
  9. //####reddit_red.bmp####
  10. long biWidth_reddit, biHeight_reddit; //Breite und Höhe
  11. WORD biBitCount_reddit; //Farbtiefe
  12. DWORD biOffBits_reddit; //OffBits
  13. BYTE *farben_reddit; //Array für Farbwerte
  14. int bg_reddit; //Bildgröße
  15. int byteCount_reddit; //Anzahl der Bytes pro Reihe, wird errechnet aus Breite * 3 + 1
  16.  
  17. //####moon_empty.bmp####
  18. long biWidth_moon, biHeight_moon; //Breite und Höhe
  19. WORD biBitCount_moon; //Farbtiefe
  20. DWORD biOffBits_moon; //OffBits
  21. BYTE *header_moon; //Array für Header
  22. BYTE *farben_moon; //Array für Farben
  23. int bg_moon; //Bildgröße
  24. int byteCount_moon; //Anzahl der Bytes pro Reihe, wird errechnet aus Breite * 3
  25.  
  26. //####Sonstiges####
  27. int bpp; //Byte Per Pixel, wird errechnet aus Farbtiefe / 8
  28. int i = 0, j = 0, k = 0, l = 0; //Laufvariablen
  29. FILE *pF; //Datei
  30.  
  31. //####Einlesen aus reddit_red.bmp####
  32. pF = fopen("reddit_red.bmp", "rb"); //Binär-lesend öffnen
  33.  
  34. if(pF == NULL){
  35. cout << "Datei konnte nicht geoeffnet werden";
  36. getch();
  37. exit(0);
  38. }
  39.  
  40. fseek(pF, 10, SEEK_SET);
  41. fread(&biOffBits_reddit, sizeof(DWORD), 1, pF); //OffBits einlesen
  42.  
  43. fseek(pF, 18, SEEK_SET);
  44. fread(&biWidth_reddit, sizeof(long), 1, pF); //Breite einlesen
  45. fread(&biHeight_reddit, sizeof(long), 1, pF); //Höhe einlesen
  46.  
  47. fseek(pF, 28, SEEK_SET);
  48. fread(&biBitCount_reddit, sizeof(WORD), 1, pF); //Farbtiefe einlesen
  49.  
  50. bpp = biBitCount_reddit / 8; //Ausrechnen der Byte Per Pixel
  51. bg_reddit = bpp*(biHeight_reddit+1)*(biWidth_reddit+1); //Ermitteln der Bildgröße; Abmessungen +1, da sonst zu klein.
  52. byteCount_reddit = (biWidth_reddit+1)*bpp; //Ermittlung der Byteanzahl pro Reihe
  53.  
  54. farben_reddit = (BYTE *)malloc(bg_reddit*sizeof(BYTE)); //Speicher für Farben anlegen
  55.  
  56. fseek(pF, biOffBits_reddit, SEEK_SET);
  57. fread(farben_reddit, sizeof(BYTE), bg_reddit, pF); //Einlesen der Farben aller Pixel
  58.  
  59. fclose(pF);
  60.  
  61. //####Einlesen aus moon_empty.bmp####
  62. pF = fopen("moon_empty.bmp", "rb"); //Binär-lesend öffnen
  63.  
  64. if(pF == NULL){
  65. cout << "Datei konnte nicht geoeffnet werden";
  66. getch();
  67. exit(0);
  68. }
  69.  
  70. fseek(pF, 10, SEEK_SET);
  71. fread(&biOffBits_moon, sizeof(DWORD), 1, pF); //OffBits einlesen
  72.  
  73. fseek(pF, 18, SEEK_SET);
  74. fread(&biWidth_moon, sizeof(long), 1, pF); //Breite einlesen
  75. fread(&biHeight_moon, sizeof(long), 1, pF); //Höhe einlesen
  76.  
  77. fseek(pF, 28, SEEK_SET);
  78. fread(&biBitCount_moon, sizeof(WORD), 1, pF); //Farbtiefe einlesen
  79.  
  80. if(biBitCount_reddit != biBitCount_moon){ //Überprüfen, ob die Farbtiefen übereinstimmen
  81. cout << "Farbtiefe stimmt nicht überein. Programm wird beendet.";
  82. getch();
  83. exit(0);
  84. }
  85.  
  86. header_moon = (BYTE *)malloc(biOffBits_moon*sizeof(BYTE)); //Speicher für Header anlegen
  87.  
  88. fseek(pF, 0, SEEK_SET);
  89. fread(header_moon, sizeof(BYTE),biOffBits_moon, pF); //Einlesen des Headers
  90.  
  91. bg_moon = bpp*(biWidth_moon+1)*(biHeight_moon+1); //Ermitteln der Bildgröße; Abmessungen +1, da sonst zu klein.
  92. byteCount_moon = biWidth_moon*bpp; //Ermittlung der Byteanzahl pro Reihe
  93.  
  94. farben_moon = (BYTE *)malloc(bg_moon*sizeof(BYTE)); //Speicher für Farben anlegen
  95.  
  96. fseek(pF, biOffBits_moon, SEEK_SET);
  97. fread(farben_moon, sizeof(BYTE), bg_moon,pF); //Einlesen der Farben aller Pixel
  98.  
  99. fclose(pF);
  100.  
  101. //####Routine zum Ersetzen der Bilddaten von moon_empty.bmp durch Bilddaten aus reddit_red.bmp; Filterung der roten Farbe
  102. for (int i = 70;i < biHeight_reddit+70; i++){ //i=70 um die Höhe zu ändern
  103. 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
  104. for(int j = 0; j < byteCount_reddit-3; j += 3){ //Schleife um Farbwerte zu überprüfen und ggf. zu ersetzen
  105. if(!(farben_reddit[k+j] == 0x00 && farben_reddit[k+j+1] == 0x00 && farben_reddit[k+j+2] == 0xFF)){ //ÜBerprüfen ob Farbe Rot ist
  106. 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
  107. farben_moon[l+j+1] = farben_reddit[k+j+1]; //+1, da der nächste Byte verändert werden muss (Eine Farbe = Bytes)
  108. farben_moon[l+j+2] = farben_reddit[k+j+2];
  109. }
  110. }
  111. k += byteCount_reddit; //Standpunkt reddit_red.bmp
  112. }
  113.  
  114. fopen("moon.bmp", "wb"); //Binär-schreibend öffnen
  115.  
  116. if(pF == NULL){
  117. cout << "Datei konnte nicht geoeffnet werden";
  118. getch();
  119. exit(0);
  120. }
  121.  
  122. fwrite(header_moon, sizeof(BYTE), biOffBits_moon, pF); //Schreiben des Headers in moon.bmp
  123. fwrite(farben_moon, sizeof(BYTE), bg_moon, pF); //Schreiben der Bilddaten in moon.bmp
  124.  
  125. fclose(pF);
  126.  
  127. free(farben_reddit);
  128. free(header_moon);
  129. free(farben_moon);
  130. }
Add Comment
Please, Sign In to add comment