2668
2014-12-29 14:15:07
1
구글링 해봤는데요
아마도 맞는거 같네요.
LONG GetBitmapBits(HBITMAP hbmp, LONG cbBuffer, LPVOID lpvBits);
2. 함수의 기능
지정한 비트맵 핸들에서 원하는 크기만큼 색상 정보를 얻는다. 색상 정보를 얻을 때는
현재 시스템의 색상수에 영향을 받기 때문에 그 크기를 정확히 계산해야지만 제대로된
정보를 얻을수 있다. 예를들어, 시스템이 32bits 색상(True Color)으로 설정되어 있다면 1개의 점이
4 Bytes의 크기를 가지게 되고 16Bits 색상(High Color)으로 설정되어 있다면 1개의 점이
2 Bytes의 크기를 가지게 된다. 따라서 비트맵이 있고 해당 비트맵의 크기가 (가로)30*(세로)40 이고
현재 시스템의 색상 정보가 High Color라면 아래와 같이 코드를 구성하시면 됩니다.
int data_size = 2*30*40; // 색상수*가로*세로
char *p_bit_pattern = new char[data_size];
// h_bitmap은 현재 생성된 비트맵 객체의 핸들이라고 가정...
GetBitmapBits(h_bitmap, data_size, p_bit_pattern);
대부분의 api 들은 같으니 아마도 이와 같을텐데.
헤더부분 없이 row image 데이터 부분만 가져온듯 합니다.
그걸 안드로이드 에서는 헤더 없는 이미지 데이터만 가지고 비트맵을 만들려고 하니깐 문제가 되는걸꺼고요.
제가 봤을때는 가장 간단한 방법은 mfc 에서 bitmap 을 파일로 저장
해당 파일을 통채로 byte 배열로 읽어옴.(이렇게 하면 헤더 + 이미지 데이터 통채로 byte 배열안에 들어감) 그걸 안드로이드에 보내줌.
안드로이드는 그걸 비트맵화 시킴.
이 간단할테고.
파일로 저장 하는 그런 무식한 방법 보다는 헤더 정보 (가로,세로,색상 정보) 를 스트링으로 먼저 보내고 이미지 데이터 byte 를 보낸뒤
안드 머신이 먼저 날라온 헤더 정보로 bitmap 을 껍데기만 만들고 해당 이미지 데이터를 나중에 보내오는 이미지 데이터 byte 로 바꿔 치기 하는게 그나마 심플 할거 같네요.