00001
00004
00005
00006 #include "stdafx.h"
00007 #include "ScreenClient.h"
00008
00010
00012
00017 ScreenClient::ScreenClient(const TString &name)
00018 :PClient(TString( TEXT("SCREEN") ) + name, true)
00019 {}
00020
00022
00024
00036 bool ScreenClient::write(const int width,
00037 const int height,
00038 const int clrUsed,
00039 const int bitCount,
00040 const RGBTRIPLE* palette,
00041 const LPBYTE imageBits)
00042 {
00043 screenInfo header;
00044 DWORD numBytesWritten;
00045 bool fOk;
00046
00047 if( (palette == NULL && clrUsed > 0) || imageBits == NULL )
00048 return false;
00049
00050 header.hdrSize = sizeof(screenInfo);
00051 header.width = width;
00052 header.height = height;
00053 header.clrUsed = clrUsed;
00054 header.bitCount = bitCount;
00055
00056 fOk = !WriteFile(hPipe,
00057 &header,
00058 sizeof(screenInfo),
00059 &numBytesWritten,
00060 NULL);
00061
00062 if( fOk || (numBytesWritten != sizeof(screenInfo)) )
00063 return false;
00064
00065 if(palette != NULL){
00066 fOk = !WriteFile(hPipe,
00067 palette,
00068 sizeof(RGBTRIPLE) * clrUsed,
00069 &numBytesWritten,
00070 NULL);
00071
00072 if( fOk || (numBytesWritten != (sizeof(RGBTRIPLE) * clrUsed)) )
00073 return false;
00074
00075 }
00076
00077
00078 DWORD size = (((( width * bitCount ) + 31) & ~31) >> 3) * height;
00079
00080 fOk = !WriteFile(hPipe,
00081 imageBits,
00082 size,
00083 &numBytesWritten,
00084 NULL);
00085
00086 if( fOk || (numBytesWritten != size) )
00087 return false;
00088
00089 return true;
00090 }