-1
我從char *
緩衝區中的服務器接收到一個JPEG圖像。我想在保存之前在圖片框中顯示此圖片。我知道的是,圖片框可以顯示來自File,Hbitmap和Stream的圖像。我不想使用這個文件。我不知道如何使用其他的。將char *緩衝區顯示爲圖像
我已經搜索並嘗試了一些,這裏是我的代碼。 我不知道爲什麼它不顯示任何圖片。
delegate void setImagedelegate(Stream^image);
void threadDecodeAndShow()
{
while (1)
{
if (f)
{
//the package that is receiving has some custom headers,
// I first find about the size of the JPEG and
//put a pointer at the beginning of the JPEG part.
BYTE *pImgSur = NULL;
DWORD imageInfoLength = *(DWORD*)m_pImgDataBufPtr[nIndexCurBuf];
DWORD customInfoLenForUser = *(DWORD*)(m_pImgDataBufPtr[nIndexCurBuf] + 4 + imageInfoLength);
DWORD jpegLength = *(DWORD*)(m_pImgDataBufPtr[nIndexCurBuf] + 4 + imageInfoLength + 4 + customInfoLenForUser);
pImgSur = (BYTE *)(m_pImgDataBufPtr[nIndexCurBuf] + 12 + customInfoLenForUser + imageInfoLength);
auto store = gcnew array<Byte>(jpegLength);
System::Runtime::InteropServices::Marshal::Copy(IntPtr(pImgSur), store, 0, jpegLength);
auto stream = gcnew System::IO::MemoryStream(store);
this->setImage(stream);
f = 0;
}
}
}
void setImage(Stream^image)
{
if (this->pictureBox1->InvokeRequired)
{
setImagedelegate^ d =
gcnew setImagedelegate(this, &MainPage::setImage);
this->Invoke(d, gcnew array<Object^> { image });
}
else
{
this->pictureBox1->Image = Image::FromStream(image);
this->pictureBox1->Show();
}
}
謝謝你的回答,嘗試了很多東西后,你的解決方案沒有錯誤地工作,但它不顯示任何圖像。 – Eoaneh
嗯,這段代碼不應該「顯示任何圖像」,它只是轉換字節。我不可能猜到,你必須提出另一個問題,並正確記錄你對返回的Image對象做了什麼。 –
我編輯了我的帖子並添加了代碼。你可以請看看嗎? – Eoaneh