Bildgröße



  • Hi!
    Ich rufe per:

    #include <windows.h>
    #include <stdio.h>
    #pragma comment(lib,"gdi32.lib")
    
    int LoadBmp2Console(char *szBitmap, int PosX, int PosY)
    {    
      HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,szBitmap,
                         IMAGE_BITMAP,0,0,LR_LOADFROMFILE); 
      if (!hBitmap) return 1; 
    
      BITMAP bmp; 
      GetObject(hBitmap,sizeof(bmp),&bmp); 
    
      HWND hwnd = FindWindow("ConsoleWindowClass",NULL);
      if (!hwnd) return 2;
    
      HDC hDC = GetDC(hwnd);   
      if (!hDC) return 3; 
    
      HDC hBitmapDC = CreateCompatibleDC(hDC); 
      if (!hBitmapDC) return 4; 
    
      SelectObject(hBitmapDC,hBitmap); 
    
      BitBlt(hDC,PosX,PosY,bmp.bmHeight,bmp.bmWidth,hBitmapDC,0,0,SRCCOPY);  
    
      DeleteObject(hBitmap); 
      ReleaseDC(hwnd,hBitmapDC); 
      ReleaseDC(hwnd,hDC);
    
    return 0;
    }
    
    int main() 
    {     
      int Status = LoadBmp2Console("bitmap.bmp",10,10);
      if(Status!=0)printf("Fehler: %i",Status);  
    
      getchar();  
      return 0; 
    }
    

    ein Bitmap auf(Code von www.cpp-programmierung.de kopiert)
    Ich weiß zwar nicht genau, wie diese Funktion funhktioniert, hab sie
    aber schon öfter gebraucht.
    Nun will ich etwas Anspruchvolleres entwerfen, dazu müsste ich wissen,
    ob und wie man die Größe des Bitmaps ändern kann, ohne immer gleich
    ein kleiners Bild zu laden.

    ➡ Wenn mir da wer helfen kann, wär ich im dankbar, wenn er es tut.

    MfG
    Canon



  • Oh, sorry, der Link is falsch.
    Der hier ist richtig:
    www.cpp-programming.de



  • Du blittest zwar auf die Konsole aber du verwendest WinAPI -> verschoben.

    MfG SideWinder



  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • moin...
    schau dir mal den befehl http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_0fzo.asp (StretchBlt) in der MSDN an 😉



  • Ne, da steig ich nich ganz durch... 😕
    könntest du nicht einfach ein code posten, der ein
    bitmap in der Größe verändert-z.B. doppelt so groß?
    Wär echt nett. 👍
    Canon.



  • Probier mal diese Funktion aus:

    HBITMAP StretchBitmap(HBITMAP hBmp1, HDC hdc)
    {
    	BITMAP bmp1, bmp2;
    	HBITMAP hBmp2;
    
    	HDC hdc1 = CreateCompatibleDC(hdc);
    	HDC hdc2 = CreateCompatibleDC(hdc);
    
    	GetObject(hBmp1, sizeof(bmp1), &bmp1);
    
    	bmp2 = bmp1;
    	//Werte festlegen
    
    	hBmp2 = CreateBitmapIndirect(&bmp2);
    
    	SelectObject(hdc1, hBmp1);
    	SelectObject(hdc2, hBmp2);
    
    	StretchBlt(hdc2, 0, 0, bmp2.bmWidth, bmp2.bmHeight, hdc1, 0, 0, bmp1.bmWidth, bmp1.bmHeight, SRCCOPY);
    
    	DeleteDC(hdc1);
    	DeleteDC(hdc2);
    	DeleteObject(hBmp1);
    
    	return hBmp2;
    }
    

    musst mal gucken, ob's funzt 🙄



  • Nehmen wir mal an, ich will das Bitmap "Landschaft", auf halbe/doppelte/wasauchimer Größe bekommen.
    Wie muss ich die Funktion denn dan aufrufen?
    Ich meine, was kommt wo?
    Beispiel:

    HBITMAP StretchBitmap(HBITMAP hBmp1, HDC hdc)
                                        ^      ^     ^   ^
                                        |      |     |   |
                                      name    größe1,2,  3
    

    Schreib mal bitte wie das geht.
    (Ich weiß ich stell mich doof an 🤡 )

    Danke!



  • Canon schrieb:

    (Ich weiß ich stell mich doof an 🤡 )

    Allerdings :p - noch nie eine Parametersignatur gesehen 😕
    Die einzelnen Parameter sind Komma-getrennt und das erste ist jeweils der Typ und das zweite den Variablenname 😉

    Alles was du eigentlich machen musst, ist, dass du den BitBlt-Funktionsaufruf in LoadBmp2Console durch folgendes ersetzt:

    StretchBlt(hDC,PosX,PosY,2*bmp.bmHeight,2*bmp.bmWidth,hBitmapDC,0,0,bmp.bmHeight,bmp.bmWidth,SRCCOPY);
    

    Ist ungetestet, sollte aber eigentlich funktionieren 🙂


Log in to reply