char obrazek[bajty_obrazka];
Alokujesz pamięć na stosie która jest znacznie większa od rozmiaru stosu. Coś takiego powinno się robić dynamiczną alokacją.
Poza tym, coś takiego technicznie jest nielegalne w C++ie.
main.cpp:85:31: warning: ISO C++ forbids variable length array ‘obrazek’ [-Wvla]
char obrazek[bajty_obrazka];
^
Taki Visual Studio by tego w ogóle nie skompilował.
Z innych ciekawostek, wychodzisz poza tablicę.
char bmp_we[200], bmp_out[200];
(...)
// w nazwa_in()
return bmp_in[200];
Czemu nie używasz nigdzie std::string i std::vector?