RDP ohne interaktion implementiern?
-
@cooky451
Dein Programm ist für ein Hund! Erstens brauche ist auf einem normalen Cpu 20% Auslastung! Und dies dann übers Netzwerk zu schicken wäre fatal langsam! Egal ob mit oder ohne compression!Volkard! Ich hätte gerne mehr gewüsst von Bildoptimierungs - Kompressions - Techniken.
-
www.c-plusplus.net schrieb:
@cooky451
Dein Programm ist für ein Hund!Na solange es nicht für den Hund ist, ist doch alles in Ordung

www.c-plusplus.net schrieb:
Erstens brauche ist auf einem normalen Cpu 20% Auslastung!
Na, wenn du das Zeichnen weg lässt ist die Auslastung wieder auf ~0%.
www.c-plusplus.net schrieb:
Und dies dann übers Netzwerk zu schicken wäre fatal langsam! Egal ob mit oder ohne compression!
Auch mit Kompression? Aha. Zum Glück liegen die Daten in der Grafikkarte schon fertig als .mp4, muss man nur noch auslesen!
-
Wie kämme ich zbsp. an den bildspeicher heran? in deinem Code? Also die Daten in einem array. Oder ein Zeiger darauf?
-
www.c-plusplus.net schrieb:
Wie kämme ich zbsp. an den bildspeicher heran? in deinem Code? Also die Daten in einem array. Oder ein Zeiger darauf?
Wenn du willst, bastel ich dir was, würde mich eh reizen. Ich setze mich mal drann, sollte heute/morgen fertig sein

(Allerdings erst mal ohne Komprimierung etc., nur die Daten über Netz schicken.)
-
Dass mit dem übers Netz schicken ist kein Problem...möchte nur wissen wie ich auf denn Speicher des hdc zugreifen kann.
-
Kenne mich mit der GDI nicht so aus!
-
www.c-plusplus.net schrieb:
Kenne mich mit der GDI nicht so aus!
Ich auch nicht

Es funktioniert jedenfalls so:
Sender:
screen_x = GetSystemMetrics(SM_CXSCREEN); screen_y = GetSystemMetrics(SM_CYSCREEN); deskDC = GetDC(0); memDC = CreateCompatibleDC(deskDC); memBMP = CreateCompatibleBitmap(deskDC, screen_x, screen_y); SelectObject(memDC, memBMP); // see http://msdn.microsoft.com/en-us/library/dd183402%28v=vs.85%29.aspx imgSize = ((screen_x * 32 + 31) / 32) * 4 * screen_y; buf = (char*)malloc(imgSize); BITMAPINFO bmpInfo = {0}; bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmpInfo.bmiHeader.biWidth = screen_x; bmpInfo.bmiHeader.biHeight = screen_y; bmpInfo.bmiHeader.biPlanes = 1; bmpInfo.bmiHeader.biBitCount = 32; bmpInfo.bmiHeader.biCompression = BI_RGB; bmpInfo.bmiHeader.biSizeImage = 0; bmpInfo.bmiHeader.biXPelsPerMeter = 0; bmpInfo.bmiHeader.biYPelsPerMeter = 0; bmpInfo.bmiHeader.biClrUsed = 0; bmpInfo.bmiHeader.biClrImportant = 0; BitBlt(memDC, 0, 0, screen_x, screen_y, deskDC, 0, 0, SRCCOPY); GetDIBits(memDC, memBMP, 0, screen_y, buf, &bmpInfo, DIB_RGB_COLORS);Empfänger:
winDC = GetDC(hwnd); memDC = CreateCompatibleDC(winDC); memBMP = CreateCompatibleBitmap(memDC, SCREEN_X, SCREEN_Y); SelectObject(memDC, memBMP); bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmpInfo.bmiHeader.biWidth = SCREEN_X; bmpInfo.bmiHeader.biHeight = SCREEN_Y; bmpInfo.bmiHeader.biPlanes = 1; bmpInfo.bmiHeader.biBitCount = 32; bmpInfo.bmiHeader.biCompression = BI_RGB; bmpInfo.bmiHeader.biSizeImage = imgSize; bmpInfo.bmiHeader.biXPelsPerMeter = 0; bmpInfo.bmiHeader.biYPelsPerMeter = 0; bmpInfo.bmiHeader.biClrUsed = 0; bmpInfo.bmiHeader.biClrImportant = 0; SetDIBitsToDevice(winDC, 0, 0, SCREEN_X, SCREEN_Y, 0, 0, 0, SCREEN_Y, buf, &bmpInfo, DIB_RGB_COLORS);Wobei das natürlich suboptimal ist, ich würde an deiner Stelle versuchen die Bitmaps auf Senderseite direkt in eine Art Videostream oder so was umzuwandeln. Wenn du noch Interesse an einem vollständigen Beispielprogramm hast, schreib eben.
-
Vielen Dank das reicht mir so.
-
Spätestens bei übertragung ins "WAN" auf einen anderen PC wirst Du ohne starke Kompression nicht mal ein Bild pro Sec haben.. Ohne jetzt das gross nachgerechnet zu haben!
-
xy schrieb:
Spätestens bei übertragung ins "WAN" auf einen anderen PC wirst Du ohne starke Kompression nicht mal ein Bild pro Sec haben.. Ohne jetzt das gross nachgerechnet zu haben!
Der nächste Experte. Bitte erst alles lesen und danach schreiben, danke

-
cooky451 schrieb:
xy schrieb:
Spätestens bei übertragung ins "WAN" auf einen anderen PC wirst Du ohne starke Kompression nicht mal ein Bild pro Sec haben.. Ohne jetzt das gross nachgerechnet zu haben!
Der nächste Experte. Bitte erst alles lesen und danach schreiben, danke

Naja
-
-
Mit dem freien x264 Codec, eventuell in Verbindung mit ffmpeg könnte man es schaffen, einen direkten .mp4 Videostream zu erzeugen. ffmpeg ist leider relativ bescheiden dokumentiert, aber vielleicht reicht der x264 Codec ja. Solche Kompressionsverfahren belasten die CPU natürlich, aber auf Qualität muss man ja nicht sonderlich achten und ich denke nicht, dass es viel performanter geht bevor nicht flächendeckend vdsl verfügbar ist.
Edit:
Alles klar
-
Bitte beim Thema bleiben...