2017. 10. 31. 03:32ㆍ프로그래밍
뷰포리아 카메라로 얻은 이미지를
ZXing 라이브러리를 이용해 마커를 디코딩할때 , 예제대로 한것 같은데 안됄때 한가지 짚어볼 점.
CameraDevice.Instance.SetFrameFormat(Image.PIXEL_FORMAT.RGB888, true);
qrresult = barCodeReader.Decode(cameraFeed.Pixels, cameraFeed.BufferWidth, cameraFeed.BufferHeight, RGBLuminanceSource.BitmapFormat.RGB24);
의 마지막 인자 비트맵 포맷이 , 카메라의 펙셀포맷과 맞는지 확인해보자.
PIXEL_FORMAT.RGB888 = RGB24비트
PIXEL_FORMAT.RGB565 = RGB16비트
라고 생각하자.
이 포맷을 맞춰줘야하는 이유는 포맷에 따라 디코딩 길이를 다르게 잡기 때문이다.
한 예로 그레이8 의 경우 한 픽셀에 대하여 한개의 바이트만 필요로 하는데,
RGB의 경우 한 픽셀을 표현하는데 R,G,B 각각 한개씩 총 3개의 바이트가 필요하다
카메라피드의 픽셀안에 RGB포멧의 경우 3개의 바이트 묶음 단위로 계산하여 디코딩하고,
그레이는 한 픽셀 단위로 계산하여 디코딩하는 방식인 것이다.
큐알디코딩은 자원을 은근 많이 먹는다.
최적화를 생각해서
큐알마커 인식에 RGB까지 필요하겠어? 하며
디코드 등급을 그레이포맷으로 내리는 경우가 있을수있다.
그렇게 돼면 코드상으로 아무 문제 없어보이는데 디코딩의 계산식이 달라져서 리절트에 아무것도 해독해내지 못하고 빈값을 반환하는데, 마치 디코딩이 정상작동하는데 큐알마커를 찾아내지 못하는 것처럼 오해하게 됀다.
'프로그래밍' 카테고리의 다른 글
C# List 정렬 ,검색, 삭제 (1) | 2015.05.06 |
---|---|
Import와 include의 차이점.. (0) | 2014.05.13 |
&& || 등의 논리연산을 오버로딩 오버라이딩 하면 안돼는 이유 (0) | 2014.05.13 |
fatal error C1189 (0) | 2013.08.20 |