Привет!
Стоит задача передавать по сети изображения ( примерно 30 джпегов по 200-300кб в секунду ). Хочеться ето сделать еффективно и красиво. Вот думаю над таким вариантом:
Код |
//Save { CSocket sockSrvr; sockSrvr.Create(9999,SOCK_STREAM,_T("127.0.0.1")); sockSrvr.Listen();
CSocket sockRecv; sockSrvr.Accept( sockRecv );
CSocketFile file(&sockRecv); CArchive ar(&file,CArchive::store); CArchiveStream stream(&ar); CImage img; HRESULT hr_res = img.Load(_T("D:\\Documents and Settings\\zhacun\\Desktop\\CreateImagesTest\\clock01.jpg")); if (S_OK != hr_res) { DWORD err = GetLastError(); ASSERT(FALSE); }
hr_res = img.Save(&stream,Gdiplus::ImageFormatJPEG); if (S_OK != hr_res) { DWORD err = GetLastError(); ASSERT(FALSE); } }
|
Код | //Load { CSocket sock; sock.Create(); UINT res = sock.Connect(_T("127.0.0.1"),9999); if (0 == res) { DWORD nError = GetLastError(); ASSERT(FALSE); }
CSocketFile file(&sock); CArchive ar(&file,CArchive::load); CArchiveStream stream(&ar); CImage img;
HRESULT hr_res = img.Load(&stream);//go into gdiplusbitmap.h next if (E_FAIL == hr_res) { DWORD err = GetLastError(); ASSERT(FALSE); } }
//gdiplusbitmap.h
inline Bitmap::Bitmap( IN IStream *stream, IN BOOL useEmbeddedColorManagement ) { GpBitmap *bitmap = NULL;
if(useEmbeddedColorManagement) { lastResult = DllExports::GdipCreateBitmapFromStreamICM(stream, &bitmap); } else { lastResult = DllExports::GdipCreateBitmapFromStream(stream, &bitmap); //returns invalidParameter here, output tells: "Warning - Attempt made to seek on a CSocketFile" }
SetNativeImage(bitmap); }
|
Подскажите в чём проблема, пожалуйста. Или предложите альтернативу.
Спасибо. |