Advertisement
Guest User

Untitled

a guest
Jun 20th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.51 KB | None | 0 0
  1. #include <iostream.h>
  2. #include <dos.h>
  3. #include <mem.h>
  4. #include <string.h>
  5. #include <conio.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8.  
  9. #define VIDEOPRZERW 0x10 // Przerwanie BIOSu
  10. #define USTAWWIDEO 0x00 // Funkcja BIOS zeby ustawić tryb video
  11. #define TRYBVGA256 0x13 // ustawia tryb 256 kolorowy 320x200
  12. #define TRYBTEKST 0x03 // ustawia tryb tekstowy 80x25
  13.  
  14. #define LICZBAKOLOROW 255 // liczba kolorow
  15.  
  16. typedef unsigned char BYTE;
  17. typedef unsigned int WORD;
  18. typedef unsigned int UINT;
  19. typedef unsigned long DWORD;
  20. typedef unsigned long LONG;
  21.  
  22.  
  23. void wlaczTryb(BYTE mode) // funkcja do ustawiania trybu graficznego albo tekstowego
  24. {
  25. union REGS regs;
  26. regs.h.ah = USTAWWIDEO;
  27. regs.h.al = mode;
  28. int86(VIDEOPRZERW, &regs, &regs);
  29. }
  30.  
  31. struct BITMAPFILEHEADER
  32. {
  33. UINT bfType; //Opis formatu pliku. Musi byc 'BM'.
  34. DWORD bfSize; //Rozmiar pliku BMP w bajtach.
  35. UINT bfReserved1; //Zarezerwowane. Musi byc rowne 0.
  36. UINT bfReserved2; //Zarezerwowane. Musi byc rowne 0.
  37. DWORD bfOffBits; //Przesuniecie w bajtach poczatku danych
  38. };
  39.  
  40. struct BITMAPINFOHEADER
  41. {
  42. DWORD biSize; //Rozmiar struktury BITMAPINFOHEADER.
  43. LONG biWidth; //Szerokosc bitmapy w pikselach.
  44. LONG biHeight; //Wysokosc bitmapy w pikselach.
  45. WORD biPlanes; //Ilosc plaszczyzn. Musi byc 1.
  46. WORD biBitCount; //Glebia kolorow w bitach na piksel.
  47. DWORD biCompression; //Rodzaj kompresji (0 – brak).
  48. DWORD biSizeImage; //Rozmiar obrazu w bajtach. Uwaga moze byc 0.
  49. LONG biXPelsPerMeter; //Rozdzielczosc pozioma w pikselach na metr.
  50. LONG biYPelsPerMeter; //Rozdzielczosc pionowa w pikselach na metr.
  51. DWORD biClrUsed; //Ilosc uzywanych kolorow z palety.
  52. DWORD biClrImportant; //Ilosc kolorow z palety niezbednych do
  53. }; //wyswietlenia obrazu.
  54.  
  55. struct RGBQUAD
  56. {
  57. BYTE rgbBlue;
  58. BYTE rgbGreen;
  59. BYTE rgbRed;
  60. BYTE rgbReserved;
  61. };
  62.  
  63. unsigned char far* video_memory = (BYTE *)0xA0000000L;
  64. FILE *bitmap_file; //Plik bitmapy
  65. BITMAPFILEHEADER bmfh; //nagłówek nr 1 bitmapy
  66. BITMAPINFOHEADER bmih; //nagłówek nr 2 bitmapy
  67. RGBQUAD palette[256];
  68.  
  69. void wyswietl(int gamma, int negatyw,BITMAPINFOHEADER bmih)
  70. {
  71. outportb(0x03C8, 0); //rozpocznij ustawianie palety od koloru nr 0
  72. for (int i = 0; i < LICZBAKOLOROW; i++) //ilosc kolorow w palecie 8-bitowej
  73. {
  74. if (palette[i].rgbRed + gamma > LICZBAKOLOROW)
  75. outp(0x03C9, 63);
  76. else if (palette[i].rgbRed + gamma < 0)
  77. outp(0x03C9, 0);
  78. else if (negatyw == 1)
  79. outp(0x03C9, ~palette[i].rgbRed * 63 / LICZBAKOLOROW);
  80. else
  81. outp(0x03C9, (palette[i].rgbRed + gamma) * 63 / LICZBAKOLOROW);
  82.  
  83. if (palette[i].rgbGreen + gamma > LICZBAKOLOROW)
  84. outp(0x03C9, 63);
  85. else if (palette[i].rgbGreen + gamma < 0)
  86. outp(0x03C9, 0);
  87. else if (negatyw == 1)
  88. outp(0x03C9, ~palette[i].rgbGreen * 63 / LICZBAKOLOROW);
  89. else
  90. outp(0x03C9, (palette[i].rgbGreen + gamma) * 63 / LICZBAKOLOROW);
  91.  
  92. if (palette[i].rgbBlue + gamma > LICZBAKOLOROW)
  93. outp(0x03C9, 63);
  94. else if (palette[i].rgbBlue + gamma < 0)
  95. outp(0x03C9, 0);
  96. else if (negatyw == 1)
  97. outp(0x03C9, ~palette[i].rgbBlue * 63 / LICZBAKOLOROW);
  98. else
  99. outp(0x03C9, (palette[i].rgbBlue + gamma) * 63 / LICZBAKOLOROW);
  100.  
  101. }
  102.  
  103.  
  104.  
  105. for(int m = 200;m>200-bmih.biHeight; m--)
  106. {
  107. int z=1;
  108. for(int i=320; i>320-bmih.biWidth; i--)
  109. {
  110. for(;z<=bmih.biWidth;z++)
  111. {
  112. BYTE l;
  113. fread(&l, sizeof(BYTE), 1, bitmap_file);
  114. video_memory[m*i-z] = l;
  115. }
  116. }
  117. }
  118.  
  119. }
  120.  
  121. int main()
  122. {
  123. char nazwaPliku[30];
  124. char wybranaOpcja, wyjscie = 'n';
  125. int dlugosc = 0;
  126.  
  127. while (wyjscie != 'T' && wyjscie != 't')
  128. {
  129. while(1)
  130. {
  131. dlugosc = 0;
  132. wyjscie = 'n';
  133. cout << "W folderze znajduja sie nastepujace pliki w formacie .BMP: \n" << endl;
  134. system("dir *.BMP");
  135. cout << "\nPodaj nazwe pliku, ktory chcesz zmienic: \n";
  136. cin >> nazwaPliku;
  137. dlugosc = strlen(nazwaPliku);
  138. if ((nazwaPliku[dlugosc - 1] != 'P' && nazwaPliku[dlugosc - 2] != 'M' && nazwaPliku[dlugosc - 3] != 'B') && (nazwaPliku[dlugosc - 1] != 'p' && nazwaPliku[dlugosc - 2] != 'm' && nazwaPliku[dlugosc - 3] != 'b'))
  139. {
  140. strcat(nazwaPliku, ".BMP");
  141. }
  142. cin.sync();
  143. if (!(bitmap_file = fopen(nazwaPliku, "rb")))
  144. {
  145. cout << "\nBlad!!! Plik nie istnieje\n" << endl;
  146. cout << "------------------------------------------------------" << endl;
  147. }
  148. else break;
  149.  
  150. }
  151.  
  152. fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, bitmap_file);
  153. fread(&bmih, sizeof(BITMAPINFOHEADER), 1, bitmap_file);
  154. fread(palette, sizeof(RGBQUAD), 256, bitmap_file);
  155.  
  156. cout<< bmih.biWidth << ' ' << bmih.biHeight;
  157. cout << "Nacisnij dowolny klawisz, aby wyswietlic plik";
  158. getch();
  159. wlaczTryb(TRYBVGA256);
  160. wyswietl(0,0,bmih);
  161. getch();
  162. wlaczTryb(TRYBTEKST);
  163. fclose(bitmap_file);
  164. //otwórz plik do odczytu w trybie binarnym "rb"
  165. bitmap_file = fopen(nazwaPliku, "rb");
  166. //odczytaj z pliku nagłówek nr 1 i zapamiętaj w zmiennej bmfh
  167. fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, bitmap_file);
  168. //odczytaj z pliku nagłówek nr 2 i zapamiętaj w zmiennej bmih
  169. fread(&bmih, sizeof(BITMAPINFOHEADER), 1, bitmap_file);
  170. fread(palette, sizeof(RGBQUAD), 256, bitmap_file);
  171. int a = 1;
  172. while(a)
  173. {
  174. cout << "Wybierz operacje graficzna:\n1. Negatyw\n2. Zmiana jasnosci\n";
  175. cin >> wybranaOpcja;
  176. switch (wybranaOpcja)
  177. {
  178. case '1':
  179. {
  180. cout << "Nacisnij dowolny klawisz, aby wyswietlic obraz";
  181. getch();
  182. wlaczTryb(TRYBVGA256);
  183. wyswietl(0,1,bmih);
  184. getch();
  185. a = 0;
  186. break;
  187. }
  188. case '2':
  189. {
  190. int gamma;
  191. cout << "Wybierz o ile chcesz zmienic jasnosc obrazu\n";
  192. cin >> gamma;
  193. cin.sync();
  194. cout << "Nacisnij dowolny klawisz, aby wyswietlic obraz";
  195. getch();
  196. wlaczTryb(TRYBVGA256);
  197. wyswietl(gamma,0,bmih);
  198. getch();
  199. a = 0;
  200. break;
  201. }
  202. default:
  203. {
  204. wlaczTryb(TRYBTEKST);
  205. cout << "Nie ma takiej opcji!";
  206. cin.clear();
  207. cin.sync();
  208. }
  209. }
  210.  
  211.  
  212. }
  213. fclose(bitmap_file);
  214. wlaczTryb(TRYBTEKST);
  215. cout << "Czy chcesz zakonczyc prace z programem? [T|n]" << endl;
  216. cin >> wyjscie;
  217. }
  218. return 0;
  219. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement