Click here to Skip to main content
15,879,047 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
I want to display my image on window without saving it.
When data is received window size changes but there is no display
on window.
My Code is:
C++
int iBufferLength;
	int iEnd;
	int iSpaceRemaining;
	
	int i;

	iBufferLength = iSpaceRemaining = sizeof(chIncomingDataBuffer);
	iEnd = 0;
	iSpaceRemaining -= iEnd;

	iBytesRead = recv(Socket, chIncomingDataBuffer+iEnd, iSpaceRemaining, 0);
	
	iEnd+=iBytesRead;
	if (iBytesRead == SOCKET_ERROR)
		MessageBox(hWnd,
						"Socket Error",
						"Connection strt",
						MB_ICONINFORMATION|MB_OK);
		chIncomingDataBuffer[iEnd] = '\0';

	if (lstrlen(chIncomingDataBuffer) != 0)
	{
		/*FILE* pfile;
					
					pfile = 	fopen("test.jpeg", "wb");
				fwrite(chIncomingDataBuffer,1, iBytesRead ,pfile);
				fclose(pfile);*/

				GetWindowRect(hWnd, &rect);
				SetWindowPos(hWnd, NULL, rect.left, rect.top, cBitmap.bmWidth, cBitmap.bmHeight, 0);
				  HDC ThisDC = GetDC(hWnd);

              DeleteDC(RemoteDC);
              RemoteDC = CreateCompatibleDC(ThisDC);
			  DeleteObject(hbitmap);
			  hbitmap= CreateCompatibleBitmap(ThisDC, cBitmap.bmWidth, cBitmap.bmHeight);

			  SelectObject(RemoteDC, hbitmap);

			  ReleaseDC(hWnd, ThisDC);



			  BITMAPINFO bi;
			  HBITMAP hbmap;
			  int bisize = sizeof(BITMAPINFO);
			  memcpy(&bi, chIncomingDataBuffer+iEnd, bisize );
			  SetDIBits(RemoteDC, hbitmap, 0,  cBitmap.bmHeight, chIncomingDataBuffer+iEnd+bisize,  &bi, DIB_RGB_COLORS);


			  InvalidateRect(hWnd, NULL, false);


Can you find my error,,,where I'm doing wrong?
Posted

1 solution

I did not check the complete code. But a cite from the MSDN GetDIBits() function shows one problem:
Quote:
The bitmap identified by the hbmp parameter must not be selected into a device context when the application calls this function.
To locate such errors, it is helpful to check the return values of all functions that may indicate error conditions by return value. To limit the check to debug builds, use the ASSERT() and VERIFY() macros; e.g. for the GetDIBits() function:
VERIFY(cBitmap.height == SetDIBits(RemoteDC, hbitmap, 0,  cBitmap.bmHeight, chIncomingDataBuffer+iEnd+bisize, &bi, DIB_RGB_COLORS));
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900