2010-03-30 4 views
0

일부 wxImages가 있는데이를 MySQL 데이터베이스의 BLOB (Binary Large OBject) 필드에 저장하고 싶습니다.C++을 사용하여 wxImage를 데이터베이스에 저장하는 방법은 무엇입니까?

그래서 데이터베이스로로드 할 수 unsigned char 배열로서 이진 데이터를 획득하기위한도 wxImagewxBitmap에서 어떠한 방법도 없다.

현재 해결 방법은 임시 파일에 이미지를 쓰고 파일에서 직접 BLOB 필드를로드하는 것입니다.

wxImage 객체를로드하고 MySQL BLOB 필드에 저장하는 더 효율적인 방법이 있습니까?

MySql C++ 커넥터 1.05, MS Visual Studio 2008, wxWidgets 및 C++을 사용하고 있습니다.

답변

1

wxWidgets에는 wxBitmap에서 데이터에 대한 API를 제공하지 않습니다. 이미지에 알파 채널이있는 경우 GetAlpha()을 사용해야 할 수도 있습니다.

그러나 데이터가 거대한 일 때 이렇게하는 방법이 아닙니다. wxImage이 이미 표준 이미지 형식 중 하나에서 이미지 쓰기를 지원할 때 수동으로 처리해야하는 이유는 위에 제시 한 것처럼 압축하는 동안 가능합니다. wxMemoryOutputStream을 만들고 SaveFile()으로 전달하십시오. 그런 다음 GetOutputStreamBuffer()->GetBufferStart() 및 관련 기능을 사용하여 스트림 버퍼에 직접 액세스하십시오.

+0

압축하지 않은 저장을 마지막으로 시도한 시간에 데이터에서 이미지를 만들 수 없습니다. 임시 파일 경로로 갔을 때 이미지에 문제가 없었습니다. API는 자신이하는 일을 알지 못한다면'SetData'를 사용하지 말라고 말합니다. –

+0

비록 내가 이것을하지 않겠다고 충고하더라도, 이것이 작동하지 않아야하는 이유가 전혀 없습니다. 그래서 제가 말할 수있는 것은 당신의 코드에 어딘가에 버그가 있었음에 틀림 없습니다. 불행히도 추가 정보 없이는 정확하지 않을 수 있습니다. –

1

뭔가를 놓치지 않는 한 WxImage :: GetData (http://docs.wxwidgets.org/2.8/wx_wximage.html#wximagegetdata)를 사용하여 데이터를 가져온 다음, GetHeight 및 GetWidth를 사용하여 포인터가 가리키는 데이터의 길이를 알 수 없습니까? WxImage :: GetData에서 반환하는 unsigned char *는 이미지를 구성하는 RGB 데이터를 가리켜 야하는 것처럼 보입니다. (이 플랫폼에 따라 때문에)하지만 wxImage 당신이 위에서 언급 한 바와 같이 그 GetData() 방법을 사용하여 액세스 할 수있는 잘 정의 된 (그리고 매우 간단) 형식을 사용

+0

당신 말이 맞습니다. 이것은 효과가있다. 그러나 데이터를 압축 할 수 있습니다. –

+0

일부 MySQL BLOB 예제는 데이터를 인코딩하여 위험한 * 바이너리 값을 피하기 위해 인쇄 가능한 범위에 있다고 말합니다. 또한 데이터에서 이미지를 만드는 방법은 무엇입니까? –