tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
11437
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    biba biba ist offline Rookie
    Registriert seit
    Feb 2003
    Ort
    Schweiz
    Beiträge
    6
    Hi

    ich will in meinem dialog ein jpg bild anzeigen lassen... das file sollte man über einen öffnen dialog selber wählen... dies klappt auch schon, nur das mit der picturebox wollte nicht klappen...

    weiss jemand rat?

    thx
    biba

    ps: das bild muss nur angezeigt werden... also nix bearbeiten oder so....
     

  2. #2
    Thomas Kuse Thomas Kuse ist offline Mitglied Rubin
    Registriert seit
    Aug 2001
    Beiträge
    1.411
    sorry das es etwas länger gedauert hat...hab deinen beitrag aber immer noch im hinterkopf gehabt

    http://www.mpdvc.de/html.htm#Q78

    7.16 Wie kann ich andere Bitmap-Formate als .bmp anzeigen?
    Wenn Bitmapformate außer .bmp benötigt werden, hilft ::LoadBitmap bzw. ::LoadImage nicht weiter. Allerdings stellt Windows mit der API-Funktion ::OleLoadPicture eine Möglichkeit zur Verfügung, diverse Formate (JPEG, GIF, WMF, ICO etc.) zu laden. Die Funktion liefert ein IPicture-Interface, welches genutzt werden kann, das geladene Grafikformat auf den übergebenen DC zu zeichnen (IPicture::Render).

    Für MFC-Anwender gibt es unter Code Project eine erweiterte Bitmapklasse (CEnBitmap), die ::OleLoadPicture/IPicture kapselt (CEnBitmap::LoadImage), die sich aber ansonsten wie CBitmap verhält.

    Das folgende Beispiel zeigt das Laden eines Bildes mit LoadPicture und die Ausgabe mit DrawPicture:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    
    LPPICTURE pPicture;
    long lWidth, lHeight;
    int iWidth, iHeight;
     
    BOOL LoadPicture(LPCTSTR pszFileName)
    {
      //datei öffnen
      HANDLE hFile = CreateFile(pszFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
     
      if(INVALID_HANDLE_VALUE == hFile)
       return FALSE;
     
      //datei größe ermitteln
      DWORD dwFileSize = GetFileSize(hFile, NULL);
     
      //speicher in größe der datei allokieren
      HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
      LPVOID  pvData  = GlobalLock(hGlobal);
     
      //datei lesen u. im speicher behalten
      DWORD dwBytesRead = 0;
      BOOL  bRead       = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL);
     
      if(!bRead)
       return FALSE;
     
      GlobalUnlock(hGlobal);
      CloseHandle(hFile);
     
      //IStream* aus dem speicher erzeugen
      LPSTREAM pstm = NULL;
      HRESULT  hr   = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm);
     
      //IPicture vom bild erzeugen
      if(pPicture)
          pPicture->Release();
     
      hr = OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID*)&pPicture);
      pstm->Release();
     
      //breite u. höhe vom bild holen
      pPicture->get_Width(&lWidth);
      pPicture->get_Height(&lHeight);
     
      HDC hdc = CreateIC(TEXT("DISPLAY"), NULL, NULL, NULL);
     
      //in Pixel konvertieren
      iWidth = (lWidth  * GetDeviceCaps(hdc, LOGPIXELSX)) / 2540;
      iHeight = (lHeight * GetDeviceCaps(hdc, LOGPIXELSY)) / 2540;
     
      return TRUE;
    }
     
    BOOL DrawPicture(HWND hwnd, HDC hdc)
    {
      if(pPicture) //wenn bild geladen
      {
       RECT rc;
       GetClientRect(hwnd, &rc);
     
       //Bild anzeigen mittels Render
       pPicture->Render(hdc, 0, 0, iWidth, iHeight, 0, lHeight, lWidth, -lHeight, &rc);
     
       return TRUE;
      }
     
      return FALSE;
    }
    mehr verweise zu dem thema:
    http://www.codeproject.com/useritems/ExtendedBitmap.asp
    http://msdn.microsoft.com/library/de..._ol2z_0k4l.asp
    http://msdn.microsoft.com/library/de...tin_p_482t.asp
    http://msdn.microsoft.com/msdnmag/is...c/default.aspx
     

  3. #3
    biba biba ist offline Rookie
    Registriert seit
    Feb 2003
    Ort
    Schweiz
    Beiträge
    6
    hey merci...

    werd es so bald wie möglich ausprobieren...

    schöns wuchenend
     

  4. #4
    MichaGue MichaGue ist offline Grünschnabel
    Registriert seit
    Jul 2003
    Beiträge
    1
    Hi Joki,

    stehe vor einem ähnlichen Problem, d.h. ich würde gerne in meiner Dialoganwendung ein beliebiges JPG anzeigen.

    Den Code deiner Funktion LoadPicture habe ich verstanden und erfolgreich eingefügt. Ich schaffe es ein Bild zu laden (Pixel werden z.B. korrekt in den Variablen angezeigt).

    Allerdings hab ich ein ungelöstest Problem. Wie zeige ich nun das geladene JPG in meiner Dialoganwendung an? Mache erst erste Schritte mit der MFC und stehe wohl deshalb auf dem Schlauch.

    Ich würde mich über ein paar hilfreich Angaben freuen. Vielen Dank schon mal im vorraus.

    Gruß Michael
     

Ähnliche Themen

  1. Bild URL aus XML anzeigen lassen?!
    Von warstel im Forum Flash Plattform
    Antworten: 5
    Letzter Beitrag: 17.02.10, 16:01
  2. Bild im Panel anzeigen lassen
    Von blackrose4me im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 04.12.08, 12:41
  3. Antworten: 2
    Letzter Beitrag: 05.07.06, 23:56
  4. Bild anzeigen lassen?
    Von tesarolle im Forum PHP
    Antworten: 2
    Letzter Beitrag: 13.05.05, 14:12
  5. Bild aus Datenbank anzeigen lassen****
    Von laempisch im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 04.07.03, 13:26