Я пытаюсь написать клиента для загрузки изображений. Я использую этот код, чтобы захватить скриншот и записать его в переменную hBitmap. Затем я хочу загрузить его, используя код под этим, но я не знаю, как конвертировать или, возможно, переформатировать изображение. Я не хочу, чтобы написать изображение в файл, а затем считывания файла, который будет легко;)Создание и загрузка скриншотов
// get the device context of the screen
HDC hScreenDC = CreateDC("DISPLAY", NULL, NULL, NULL);
// and a device context to put it in
HDC hMemoryDC = CreateCompatibleDC(hScreenDC);
int x = GetDeviceCaps(hScreenDC, HORZRES);
int y = GetDeviceCaps(hScreenDC, VERTRES);
// maybe worth checking these are positive values
HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDc, x, y);
// get a new bitmap
HBITMAP hOldBitmap = SelectObject(hMemoryDC, hBitmap);
BitBlt(hMemoryDC, 0, 0, width, height, hScreenDC, 0, 0, SRCCOPY);
hBitmap = SelectObject(hMemoryDC, hOldBitmap);
// clean up
DeleteDC(hMemoryDC);
DeleteDC(hScreenDC);
Это мой Выгрузка код:
void HTTP_UPLOAD_REQUEST(char * Server,int Port,char * uploadscript,char* boundary,char*filetoup,char* data)
{
//Create Socket for sending data
WSADATA wsaData;
WSAStartup(MAKEWORD(1,1), &wsaData);
SOCKET Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
LPHOSTENT hostEntry;
hostEntry = gethostbyname(Server);//Get ip from Server by hostname
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list);
addr.sin_port = htons(Port); //Set Port
connect(Socket, (LPSOCKADDR) &addr, sizeof(struct sockaddr));
//Socket created and connected to Server!
//Create HTTP POST Request
//construct POST Header
char header[512]="";
sprintf(header, "POST %s HTTP/1.0\r\nContent-Type: multipart/form-data; boundary=%s\r\nContent-Length: %u\r\n\r\n",uploadscript, boundary,2*strlen(data));
//construct Body(data part) of HTTP POST
char* body=new char[strlen(data)+4000];
sprintf(body, "--%s\r\nContent-Disposition: form-data; name=\"%s\"; filename=\"%s\"\r\n\r\n %s\r\n--%s\r\n",boundary,"data",filetoup,data,boundary);
//Put Header and Body together into Request
char * Request=new char[strlen(header)+strlen(body)+strlen(data)];
sprintf(Request, "%s%s", header,body);
//int bytestosend = strlen(Request);
int bytessend =send(Socket, Request, strlen(Request), 0);
closesocket(Socket);//cleanup -!
}
Мне не разрешается использовать какие-либо другие файлы, кроме основной программы, и если я правильно помню, что libcurl нуждается в некоторых dll. – user2855954
libcurl можно связать статически (без dll's). Если вам не разрешено использовать его, по крайней мере исправить утечки памяти. Я бы рекомендовал использовать 'std :: string' вместо' char * '. –
В какой момент я должен использовать строку (мое пространство имен установлено на std), можете ли вы предоставить мой рабочий пример? – user2855954