bitmaps schicken
-
gargamel schrieb:
habs damit gemacht is des aus dem faq
aber wie kann ich des jetzt verschicken die socket verbindung hab ich schon alles gemacht jetzt muss ich nur noch wissen wie man des file verschickt

Ja, genau das hatte ich doch schon gepostet!!! Das hättest du hier nicht wirklich nochmal aufführen müssen.
Und das Schicken geht doch genauso. Nur, dass du send() anstatt WriteFile() benutzt. Liest du dir fremde Codes denn nicht durch, wenn du sie benutzt???
-
aber wieso gehen dann bei der keine 16bit
-
irgentwie geht des mit dem senden bei mir nich kansch du mir bitte zeigen wie des geht des klappt bei mir einfach nich

-
Hallo Leute !
ich muss als Abschlussprojekt eine RemoteControlling Software schreiben. Muss also den Bildschirmabdruck über die Leitung schicken, auf der Gegenseite empfangen, und anzeigen. Bevor ich anfangen kann, muss ich einiges klären, und vielleicht könnt ihr mir helfen. Und zwar sollen folgende Vorraussetzungen für meinen Anwendungfall erfüllt sein:
1. Auflösung 1024 x 768
2. Bildschirmabdruck ca. 5 mal pro sec verschicken (auf der Gegenseite also entgegennehmen und zur Anzeige bringen)
3. Das Komprimierungsverfahren muss freeware sein.Nun die Fragen, die ich habe:
1. Welches Komprimierungsverfahren kommt hier in Frage ?
2. Wie verschicke ich die Bilder, in welcher Form ? Was ich meine ist, muss das eine Datei sein, die ich über TCP/IP verschicke ? Oder gibt es spezielle Klassen dafür ? Könnte mir z.B. ne Art Buffer vorstellen, so, wie man eben Textdateien verschickt.Ich danke Euch schon mal im Voraus, hoffe ihr könnt mir helfen
-
Komprimier die Bilder via jpeg und sende immer nur Bildteile die sich geändert haben, dass bringt besonders bei nem Desktop nen enormen Speed-Vorteil!
-
Und woher weiß man, was sich geändert hat???
-
Das letzte Bild im Speicher behalten und mit dem aktuellen vergleichen ?
-
Ist das nicht etwas zu viel Aufwand bei 1024 x 768 = 786432 Pixeln?
-
Hmm... also diese Frage interessiert mich auch. Ich würde aber sagen Graka(Wie WebFritzi so schön schrieb) anzapfen kommt besser als das mit einzelnen Bildern zu machen. Nur wie?...
-
geeky schrieb:
Komprimier die Bilder via jpeg und sende immer nur Bildteile die sich geändert haben, dass bringt besonders bei nem Desktop nen enormen Speed-Vorteil!
Verstehe ich das richtig, dass die Bilder verglichen werden sollen und wenn Sie nicht übereinstimmen, dann gesendet werden ? Oder muss ich nur Teile senden ? Wie soll das denn gehen ?
Und meine zweite Frage war ja, wie versende ich die ? Muss ich dann mit DIBs arbeiten ? Oder wie ?
-
Da ist noch etwas, die Auflösung die ich verwenden werde ist 640 x 480 bei 8 Bit Farbtiefe (ist ein Industrie-PC)
-
Man muss das doch auch anders lösen können. Sonst ergibt das nie ein flüssiges Bild.(Und das ist möglich. Ich hab sowas schon mal gesehen) Man müsste die Daten von der Grafikkarte irgendwie gleich verschicken. Nochmal msdn durchwühlen...
-
Schau dir mal RealVNC an, da bekommst du sogar den Source-Code

-
Sieht nett aus. Es ist gerade kein Compiler in Reichweite, aber ich werd's mir heute abend mal reinziehen!
-
Naja, habe eigentlich gehofft, hier ein paar nütliche Infos zu erhalten. Mein Ziel ist ja nicht, Quellcode zu finden, sondern zu erfahren, mit welchen Klassen, Techniken, unw. man arbeiten muss. Denn wie oben schon gesagt, das ist mein Abschlussprojekt (FIAE), und da möchte ich schon selber Hand anlegen, und nicht Quellcode von anderen benutzen.
-
Dann musst du dir eben mit den Infos, die du bekommen hast, selber Gedanken machen und mal in der MSDN nachschlagen

Eigentlich musst du dir eben nur ein Format ausdenken, das beide Seiten verstehen. Und um die Übertragung flüssiger zu gestalten schickst du eben evtl. nicht immer alles, sondern z.B. nur den Bereich, des aktiven Fensters oder eben die Änderungen und komprimierst die Daten
-
Hallo felnders,
ich bin natürlich für alle Infos, die ich hier erhalten habe, sehr dankbar
Mein Problem ist folgedes: ich muss ja das Projekt planen, und darum mir Gedanken machen, 1. wie ich komprimiere, um den Durchsatz (5 x / sec) bei der gegebenen Auflösung erreichen zu können, und 2. wie ich die Daten sende, auf welche Weise, ob ich da DIB-Objekte verschicke, oder ob ich das mit Buffer mache, oder sonst wie. Habe halt noch nie Bilddateien über Ethernet übertragen. Das Komprimieren und Verschicken der Bilder (Industrie-PC) wird nicht von mir realisiert, sondern von meinen Ausbildern. Ich nehme die Daten entgegen, und zeige diese an (PC).
Ich muss meinen Ausbildern aber sagen, in welcher Form (DIBs, Buffer, oder was auch immer) ich die Daten haben will. Da ich keine Erfahrung damit habe, und meine Durchführungszeit begrenzt ist, möchte ich von Befinn an den richtigen Weg nehmen, damit ich nicht mitten in der Projektdurchführung feststelle, dass das so, wie ich mir das vorgestellt habe, nicht funktioniert.In der MSDN kann ich natürlich auch nachgucken, aber wonach soll ich denn suchen ???
-
proga schrieb:
wie ich die Daten sende, auf welche Weise, ob ich da DIB-Objekte verschicke, oder ob ich das mit Buffer mache, oder sonst wie. Habe halt noch nie Bilddateien über Ethernet übertragen.
Die Übertragung von Bilddaten funktioniert eigentlich nicht anders als die Übertragung anderer Daten und als Format musst du dir eben was passendes suchen (evtl. PNG o.ä.)
proga schrieb:
Das Komprimieren und Verschicken der Bilder (Industrie-PC) wird nicht von mir realisiert, sondern von meinen Ausbildern. Ich nehme die Daten entgegen, und zeige diese an (PC).
Wie jetzt? Musst du jetzt doch nur ein Tool für die Anzeige der Bilddaten schreiben

proga schrieb:
Ich muss meinen Ausbildern aber sagen, in welcher Form (DIBs, Buffer, oder was auch immer) ich die Daten haben will. Da ich keine Erfahrung damit habe, und meine Durchführungszeit begrenzt ist, möchte ich von Befinn an den richtigen Weg nehmen, damit ich nicht mitten in der Projektdurchführung feststelle, dass das so, wie ich mir das vorgestellt habe, nicht funktioniert.
Also wird dieser Part von jemand anderem übernommen, richtig?
Das beste ist natürlich, wenn immer nur die Veränderungen übertragen werden, aber das wäre ja dann eine Sache der Gegenstelle. Ansonsten musst du dir eben überlegen, welche Anforderungen du bzgl. der Qualität stellst. Durch reduzieren der Farbtiefe und Kompression der Daten kannst du dann natürlich noch zusätzlich einiges an Bandbreite sparen. Bei einem fertiges Daten-Format (wie z.B. PNG) o.ä.) hast du eben den Vorteil, dass du auf fertigen Code zurückgreifen kannst.
-
Hallo flenders,
danke erstmal für deine Antwort.
Also, du hast es richtig verstanden, die Komprimierung auf der Gegenseite wird nicht von mir gemacht, sondern von jemand anders. Aber alles was auf einer Seite komprimiert wird, muss auf der Gegenseite (also von mir) wieder gekomprimiert werden. Zu meinem Projekt gehört halt die Auswahl eines geeigneten Komprimierungsverfahren. Ich glaube ich habe jetzt ungefähr die Übersicht bekommen, wie und was ich machen muss. Danke für die Hilfe
-
Ich hab mal in den Code von VNC... geschaut. Die betreiben Message-Hooking und benutzen GetUpdateRgn() in WM_PAINT, um die upzudatende Region zu senden. Hier ein Ausschnitt:
//////////////////////////////////////////////////////////////// // Messages indicating that an area of the window needs updating // Uses GetUpdateRect to find out which case WM_PAINT: if (prf_use_GetUpdateRect) { HRGN region; region = CreateRectRgn(0, 0, 0, 0); // Get the affected region if (GetUpdateRgn(hWnd, region, FALSE) != ERROR) { int buffsize; UINT x; RGNDATA *buff; POINT TopLeft; // Get the top-left point of the client area TopLeft.x = 0; TopLeft.y = 0; if (!ClientToScreen(hWnd, &TopLeft)) break; // Get the size of buffer required buffsize = GetRegionData(region, 0, 0); if (buffsize != 0) { buff = (RGNDATA *) new BYTE [buffsize]; if (buff == NULL) break; // Now get the region data if(GetRegionData(region, buffsize, buff)) { for (x=0; x<(buff->rdh.nCount); x++) { // Obtain the rectangles from the list RECT *urect = (RECT *) (((BYTE *) buff) + sizeof(RGNDATAHEADER) + (x * sizeof(RECT))); SendDeferredUpdateRect( hWnd, (SHORT) (TopLeft.x + urect->left), (SHORT) (TopLeft.y + urect->top), (SHORT) (TopLeft.x + urect->right), (SHORT) (TopLeft.y + urect->bottom) ); } } delete [] buff; } } // Now free the region if (region != NULL) DeleteObject(region); } else SendDeferredWindowRect(hWnd); break; //////////////////////////////////////////////////////////////// // Messages indicating full repaint of this and a different window // Send the new position of the window case WM_WINDOWPOSCHANGING: if (IsWindowVisible(hWnd)) SendWindowRect(hWnd); break; case WM_WINDOWPOSCHANGED: if (IsWindowVisible(hWnd)) SendDeferredWindowRect(hWnd); break;Ist alles ganz gut kommentiert. Wer wirklich was reißen will, sollte da mal reinschauen, denke ich.