이번에 프로그램 하나를 개발해야 하는데요…
기기랑 시리얼 통신을 통해서 데이터를 계속 받아옵니다.
그래서 그 데이터를 기반으로 이와 같은 화면을 만들어야 하거든요.
격자 무늬는 필요 없고 저 색깔 표현을 해줘야 하는데 어떻게 해야할지 막막하네요.
일단 검은색으론 표시를 해보긴 했는데 FillRectangle 함수를 이용해서 그냥 작은 네모로 표현을 하다보니 이미지와 같이 부드럽게도 안되고 색깔은 어찌저찌 할꺼같지만요…
일단 구현해야 되는건 저런 화면입니다. 데이터 값은 ushort[48, 128]로 좌표 처럼 넘어오며 값은 0~255로 들어옵니다.
저런 화면을 구현하는데 참고될 만한게 있을까요?
그리고 일단 대충이라도 만들긴 했는데요 . 이게 실시간으로 데이터가 많이 빨르게 들어와서 조금 랙이 걸리는 느낌이 있네요. 좀 알아보니 gpu 연산을 이용하는 방법도 있다던데 국내엔 자료가 너무 없네요. 있어도 너무 옛날꺼고요 ㅠㅠ. 혹시 gpu 연산은 어떤걸 알아보면 될까요?
일단 1번 조건에서 gpu활용하는건 많은 제약이 따른다는 건 아실거 같고…(wpf를 다룰줄 아신다면 wpf강추합니다)
2번 조건을 보면 시리얼통신이 아시다시피 이벤트 기반이잖습니까? 그래서 이벤트수신과 동시에 ui처리를 하려면 당연히 3번의 상황으로 인해 보틀넥이 무조건 생길 수 밖에 없는데요.
왜냐하면 data recieve 이벤트에서 스레드가 잡혀있는 상태에서 ui를 미처 다 처리하기도 전에 이미 시리얼 버퍼에는 데이터가 쌓이고 있는 상황이거든요…
여기서 우리가 인정하고 넘어가야될게, 윈폼에서는 동시에 아주 많은 데이터가 빠르게 통신으로 넘어올 경우에 그 데이터를 한꺼번에 처리할 수가 없다는겁니다.
(보레이트가 높을수록 더욱 그러하지만, 만일 보레이트가 9600 정도라면 보틀넥이 그렇게 생길것 같진 않네요)
제가 저런 프로그램을 다루거나 작성할 때는 통신 수신부와 ui처리부를 분리하는 방식을 택하는 편입니다.
데이터 수신은 막힘없이 하고, ui를 조금 늦게 처리하는거죠. (실제로는 화면 반영이 느리다는 느낌도 별로 없을듯)
일종의 버퍼를 만들어두고 데이터 수신하면 그 버퍼에 데이터를 쌓아둡니다.
그리고나서 별도의 작업 스레드를 돌려서(반복주기가 매우 짧은) ui를 처리하는 방식으로요…(한꺼번에 혹은 나눠서)
정확히 얼마나 많은 데이터를 얼마나 짧은 주기로 화면에 표현하는지 모르다보니 답변이 뭔가 확실하지가 않네용…ㅠ
부디 잘 해결하시길…
저희 사람이 보기에 편한 방식으로 하면 이런 식으로 데이터가 넘어옵니다.
해당 부분은 센서가 가로 48개, 세로 128개의 센서가 있는 판 위에 아령을 올려놓았을 때의 모습입니다. 그러다보니 아령의 형태로 데이터가 생기네요. 해당 이미지에서는 아령이 올려진 위치 부분만 제가 잘라서 가져온겁니다. 실제론 x축이 48개이며, y축이 128개 입니다.
0으로 표시된 부분은 압력을 아예 받고 있지 않은, 즉 물건이나 힘이 가해지지 않은 위치이며 0 초과인 부분만 압력이 가해지고 있는 부분 입니다.