2014-04-21 3 views
1

변경 될 때마다 스레드의 원시 이미지 데이터에 대한 포인터를 얻고 다른 스레드가이를 사용하기 전에 복사본을 만들고 싶습니다. 원시 데이터의 크기를 모르는 경우 무작위로 크기를 선택하고 원시 데이터를 제공하기 때문에 어떻게이 작업을 수행 할 수 있습니까? 이 포인터에서 원시 데이터를 복사하려면 어떻게해야합니까?이미지 원시 데이터 복사

+2

얼마나 많은 데이터를 가리키고 있고 EOT 마커가 없는지 확실하지 않은 경우이를 안정적으로 수행 할 수 없습니다. –

+0

원시 데이터에 대한 포인터가 크기에 대해 아무 것도 알려주지 않습니다. 따라서 솔루션은 간단합니다. 크기를 전달하는 메커니즘을 추가해야합니다. 예를 들어, "원시 데이터"크기를 하나의 int로 확장하고이 크기를 쓰십시오. – usr2564301

+0

그러면 어떻게해야합니까? 덤프 된 이미지의 너비와 높이를 계산할 수 있다면이 포인터의 복사본을 만드는 신뢰할 수있는 방법입니다. – user3365783

답변

0

원시 포인터 "데이터"의 복사본을 만들려면 추가 정보 인이 데이터의 크기가 필요합니다. 원시 데이터는 이미지를 가리키고 있으므로 생성시에 이미 widthheight이 있습니다. 이것이 8 비트/픽셀 이미지가 아닌 경우 bpp (픽셀 당 바이트)을 가질 수도 있습니다. 이 세 가지를 곱하면 원시 데이터 크기가됩니다.

현재 원시 데이터의 주소 만 전달합니다. 다른 변수에 액세스하려면 나머지 변수도 전달해야합니다. (내 댓글 당)

하나의 옵션은 widthheight (선택적, bpp)를 저장하는 데 필요한 크기로 malloc 에드 원시 데이터 크기를 확장하여 매우 시작에서 다음을 저장하는 것입니다.

더 좋은 방법 (더 관리하기 때문에)을 생성하는 것 struct :

struct myData_t { 
    int width; 
    int height; 
    void *data; 
} myData, *myDataPtr; 

이 데이터를이 구조체를 작성하고 다른 기능 (들)의 주소를 반환합니다.

올바른 순서대로 메모리 정리를 수행해야합니다. 먼저 myDataPtr->data을 해제하고 그 다음에만 myDataPtr을 해제하십시오.

+0

감사합니다. :) – user3365783