bitmaps schicken



  • wo liegt dein Problem?



  • Meins oder seins? Er dürfte nach meinem Post keins mehr haben, wenn er Bitmaps in File-Form schicken möchte. Meins ist, dass ich nicht weiß, wie ich die Graka anzapfen soll.

    EDIT: Wie ich gerade aus einem anderen Thread schließen kann, will gargamel das gleiche wie ich: einen Desktop überwachen. Das wäre mit Bitmaps schicken nicht sehr gut, da die Bitmaps einfach viel zu groß wären. Man muss direkt an die GraKa ran.



  • Ich meinte seines 😉 - war eben mal wieder zu langsam 🙄
    Also zum überwachen ist die Bitmapform sicher nicht so das Wahre, da sie eben - wie du schon sagtest - viel zu groß sind.
    Du willst bzw. ihr wollt also quasi sowas wie VNC schreiben - zumindest von der Desktop-Überwachung?!



  • VNC? Was? Kenn ich ned. Aber ne Video-Überwachung, ja. Nicht wahr, gargamel? 😉



  • gibts kein format wos den desktop speichert und kleiner is als 1mb mindestens



  • VNC ist eine Remote Control Software (siehe: http://www.realvnc.com/what.html)



  • Natürlich gibt es sowas - JPEG zum Beispiel - kommt eben darauf an, was das im Endeffekt geben soll 😉



  • Auflösung: 1024x768 = 786432
    Speicher pro Pixel: 3 Bytes
    Macht insgesamt: 2359296 Bytes = 2304 KB = 2.25 MB

    Das brauchst du mindestens!



  • Oder auch zum Beispiel mit PNG wird es relativ klein (Ich hab gerade mal ein Screenshot gemacht - kommt auf 40 KB) und sieht dabei noch genauso gut aus 🙂



  • komisch bei mir is der desktop nur 1.50mb groß



  • und wie machs ich mit winapi und png???



  • flenders schrieb:

    Oder auch zum Beispiel mit PNG wird es relativ klein (Ich hab gerade mal ein Screenshot gemacht - kommt auf 40 KB) und sieht dabei noch genauso gut aus 🙂

    Dann muss man wohl trotzdem erstens den ScreenShot per Bitmap machen (was schon einige Zeit kostet) und dann auch noch konvertieren (1. keine Ahnung, wie das geht, und 2. kostet das auch Zeit).



  • gargamel schrieb:

    komisch bei mir is der desktop nur 1.50mb groß

    Hast du vielleicht ne andere Auflösung als 1024 x 768? Oder eine andere Farbauflösung? Meiner ist so groß!



  • also ich hab als farbtiefe 16 und des sieht immer noch gut aus
    aber bei ner farbtiefe von 8 siehts erst lustig aus *gg*



  • aber wie kann ichs jetzt denn mit einem socket verschicken?????



  • Mit was für einer Farbtiefe speicherst du das Bitmap? Bei mir gibts da keine 16 Bit. Nur 24 Bit, 256 Farben (8 Bit) und drunter...
    Aber du hast recht, die Farbeinstellungen für das Desktop sehen mit 16 Bit immernoch OK aus.



  • LRESULT MENUFIVE(HDC hdc, int width, int height, char *filename) 
    { 
    
        HDC hdc2; 
        HBITMAP aBmp; 
        BITMAPINFO bi; 
        HGDIOBJ OldObj; 
        void *dibvalues; 
        HANDLE fileHandle; 
    
        BITMAPFILEHEADER bmfh; 
        BITMAPINFOHEADER bmih; 
            DWORD bytes_write; 
        DWORD bytes_written; 
    
        hdc2=CreateCompatibleDC(hdc); 
    
        ZeroMemory(&bmih,sizeof(BITMAPINFOHEADER)); 
        bmih.biSize=sizeof(BITMAPINFOHEADER); 
            bmih.biHeight=height; 
            bmih.biWidth=width; 
            bmih.biPlanes=1; 
            bmih.biBitCount=16; 
        bmih.biCompression=BI_RGB; 
        bmih.biSizeImage = ((((bmih.biWidth * bmih.biBitCount) + 31) & ~31) >> 3) * bmih.biHeight; 
            bmih.biXPelsPerMeter = 0; 
            bmih.biYPelsPerMeter = 0; 
            bmih.biClrImportant = 0; 
        //bmih.biSizeImage=(3*bmih.biHeight*bmih.biWidth); 
            //bmih.biSizeImage = 0; 
    
        bi.bmiHeader=bmih; 
    
        aBmp=CreateDIBSection(hdc,&bi,DIB_RGB_COLORS,(void**)&dibvalues,0,0); 
    
        if (aBmp==0) 
        { 
            OutputDebugString("CreateDIBSection failed!\n"); 
            return 0; 
        } 
    
        OldObj=SelectObject(hdc2,aBmp); 
        BitBlt(hdc2,0,0,width,height,hdc,0,0,SRCCOPY); 
    
        ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER)); 
        bmfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); 
        bmfh.bfSize=(3*bmih.biHeight*bmih.biWidth)+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); 
            bmfh.bfType=0x4d42; 
            bmfh.bfReserved1 = 0; 
            bmfh.bfReserved2 = 0; 
    
        fileHandle=CreateFile(filename,GENERIC_READ | GENERIC_WRITE,(DWORD)0,NULL, 
                                                        CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL); 
        if (fileHandle==INVALID_HANDLE_VALUE) 
        { 
            OutputDebugString("CreateFile failed!\n"); 
            return 0; 
        } 
    
            // Write the BITMAPFILEHEADER 
            bytes_write=sizeof(BITMAPFILEHEADER); 
        if (!WriteFile(fileHandle,(void*)&bmfh,bytes_write,&bytes_written,NULL)) 
        { 
            OutputDebugString("WriteFile failed!\n"); 
            return 0; 
        } 
    
            //Write the BITMAPINFOHEADER 
        bytes_write=sizeof(BITMAPINFOHEADER); 
        if (!WriteFile(fileHandle,(void*)&bmih,bytes_write,&bytes_written,NULL)) 
        { 
            OutputDebugString("WriteFile failed!\n"); 
            return 0; 
        } 
    
            //Write the Color Index Array??? 
            bytes_write=bmih.biSizeImage;//3*bmih.biHeight*bmih.biWidth; 
        if (!WriteFile(fileHandle,(void*)dibvalues,bytes_write,&bytes_written,NULL)) 
        { 
            OutputDebugString("WriteFile failed!\n"); 
            return 0; 
        } 
    
        CloseHandle(fileHandle); 
    
        DeleteObject(SelectObject(hdc2,OldObj)); 
        DeleteDC(hdc2); 
    
        return 1; 
    }
    

    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 😮 😮



  • 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 😞 😞 😞 😞


Anmelden zum Antworten