二次元配列も内部では一次元配列なので
FileRead_read((char*)&data[0],sizeof(char)*x*y,hn);(←適当)
こんな感じでまとめて読めるのでは

FileRead_getcでも
for (int y=0...) {
for (int x=0...) {
data[x][y]=FileRead_getc(hn);
}
}
でいけるんじゃないかな