void SDLCardView::SetIdentityCard(IdentityCard& card) { m_Card = card; SDL_RWops* pixelsWop = SDL_RWFromConstMem(card.m_Photo.photo.ToCString(), card.m_Photo.photo.Length()); m_pIdentityPhotoSurface = IMG_LoadJPG_RW(pixelsWop); m_pIdentityPhotoTexture = SDL_CreateTextureFromSurface(m_pRenderer, m_pIdentityPhotoSurface); m_IsCardSet = true; }
bool Image::LoadJPG_RW(SDL_RWops *src) { SDL_Surface *temp = IMG_LoadJPG_RW(src); if(temp == NULL) return false; else m_Surface = temp; return true; }
int main(int argc, char* argv[]) { FILE *fp; int archive_flag = 0; int framecount = 0; char filename[20]; int index = 0; int i1, size; int result, ready, timeout; int imageReady = 0; char imageBuf[MTU*10]; char buf[MTU], *cp; char msg[2] = {'I', 0}; char msg1[5] = { 'M', 0x01, 0x01, 0x01, 0}; IPaddress ipaddress; TCPsocket tcpsock; SDLNet_SocketSet socSet; unsigned int flags = SDL_DOUBLEBUF|SDL_HWSURFACE; SDL_Surface *screen; SDL_Surface *image; unsigned int nrSocketsReady; // initialize SDL and SDL_net if((SDL_Init(SDL_INIT_VIDEO) == -1)) { printf("Could not initialize SDL: %s.\n", SDL_GetError()); return 1; } if(SDLNet_Init() == -1) { printf("SDLNet_Init: %s\n", SDLNet_GetError()); return 2; } if(TTF_Init() == -1) { printf("TTF_Init: %s\n", TTF_GetError()); return 3; } // initialize the screen screen = SDL_SetVideoMode(320, 260, 32, flags); SDLNet_ResolveHost(&ipaddress, IP_ADDRESS, 10001); tcpsock = SDLNet_TCP_Open(&ipaddress); if(!tcpsock) { printf("SDLNet_TCP_Open 1: %s\n", SDLNet_GetError()); return 2; } socSet = SDLNet_AllocSocketSet(1); SDLNet_TCP_AddSocket(socSet, tcpsock); msg1[0] = msg1[1] = msg1[2] = msg1[3] = 0; SDL_Event event; int quit = 0; imageReady = 0; timeout = 0; // main loop for (; !quit;) { // check keyboard events *msg1 = 0; while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_MOUSEBUTTONUP: if(event.button.button == SDL_BUTTON_LEFT){ printf("X: %d Y: %d\n", event.button.x, event.button.y); } break; case SDL_KEYDOWN: switch( event.key.keysym.sym ) { case SDLK_ESCAPE: quit = 1; break; case SDLK_a: archive_flag = 1; framecount = 0; printf(" archiving enabled - files saved in ./archives/ directory\n"); break; case SDLK_RETURN: printf("Entering input mode...\n"); sendCmd(tcpsock,socSet, screen); break; } break; } } index = 0; imageBuf[0] = 0; imageReady = 0; // send 'I' command result = SDLNet_TCP_Send(tcpsock, msg, 1); if(result < 1) printf("SDLNet_TCP_Send 1: %s\n", SDLNet_GetError()); // look for frames while (!imageReady) { if (!imageReady) { nrSocketsReady = SDLNet_CheckSockets(socSet, TIMEOUT); if (nrSocketsReady == -1) { printf("SDLNet_CheckSockets: %s\n", SDLNet_GetError()); perror("SDLNet_CheckSockets"); } else if (nrSocketsReady > 0) { if (SDLNet_CheckSockets(socSet, TIMEOUT)) { if (SDLNet_SocketReady(socSet)) { result = SDLNet_TCP_Recv(tcpsock, buf, MTU); memcpy(imageBuf+index, buf, result); index += result; if ((buf[result-2] == -1) && (buf[result-1] == -39)) imageReady = 1; } } } else { printf("\n\rNo sockets ready.\n\r"); break; } } } // make certain that captured frames are valid if (!imageReady || imageBuf[0]!='#' || imageBuf[1]!='#' || imageBuf[2]!='I') { imageReady = 0; printf("bad image, or Checksockets() timed out!\n"); continue; } size = (unsigned int)imageBuf[6] + (unsigned int)imageBuf[7]*256 + (unsigned int)imageBuf[8]*65536; if (size > index-10) { printf("bad image size: %d %d %d\n", size, index, framecount); imageReady = 0; continue; } imageReady = 0; timeout = 0; SDL_RWops *rwop; rwop = SDL_RWFromMem(&(imageBuf[10]), index-10); image = IMG_LoadJPG_RW(rwop); cp = (char *)image->pixels; if (archive_flag) { sprintf(filename, "archives/%.4d.ppm", framecount); fp = fopen(filename, "w"); fprintf(fp,"P6\n320\n240\n255\n", 15); fwrite(cp, 1, 230400, fp); fclose(fp); } framecount++; SDL_BlitSurface(image, NULL, screen, NULL); SDL_Flip(screen); SDL_FreeRW(rwop); SDL_FreeSurface(image); } TTF_Quit(); SDLNet_TCP_Close(tcpsock); SDLNet_Quit(); SDL_Quit(); return 0; }