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;
	}
示例#3
0
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;
}