Czy muszę otworzyć plik w trybie binarnym, czy coś w tym stylu?
Powinieneś, tak. Inaczej to co wczytasz do programu może być inne niż faktyczna zawartość pliku (to samo z zapisem).
Dlaczego gdy mam plik PNG i zmienię jego rozszerzenie na TXT i otworzę w C++ to nie czyta nic, oprócz pierwszej linii?
Zależy jak to zrobiłeś i jak sprawdzasz ile jest linii. Jak pokażesz jak to robisz, to będę mógł więcej powiedzieć.
Ogólnie pojęcie "linii" nie ma sensu dla plików nie-tekstowych.
Być może w pliku nie było ani jednego bajtu o wartości \n, więc program potraktował cały plik jako jedną "linię".
(btw zmiana rozszerzenia nie ma żadnego znaczenia dla programów, to tylko podpowiedź jakiego formatu oczekiwać)
Czy znaki w graficznym pliku otwartym w edytorze tekstu po prostu nie należą do tabeli ASCII i tym jest to spowodowane?
Nie ma związku. Edytor tekstu spróbuje przeczytać dane z jakimś kodowaniem (UTF8, Windows-1250, ISO-8859-2... lub innym), a kombinacji bajtów których nie rozumie nie pokaże lub pokaże jakiś znak zastępczy. ASCII sam z siebie obejmuje tylko połowę możliwych wartości bajta (właśnie współczesne kodowania rozszerzają ASCII wykorzystując drugą połowę zakresu), więc edytory w zasadzie nigdy samego ASCII nie używają.
Przy działaniu na danych nie-tekstowych, jak na przykład pliku PNG - tematy linii, ASCII, kodowań etc nie mają w ogóle miejsca.