Bild aus einer JPG-Datei in einem PictureControl anzeigen
-
Unicode ist dir ein Begriff?
CString csFilename = _T("C:\\MeinBild.jpg");
Ansonsten geht auch (nicht Unicode):
WCHAR *szFilename = L"C:\\MeinBild.jpg"; CStringW csFilename = L"C:\\MeinBild.jpg";
Wobei gilt:
_T("") wird je nach Build durch nix oder durch L ersetzt. L bedeutet Literal erstellt dir einen 2Byte String. Ansonsten kannst du in nicht-Unicode Builds auch mit MultiByteToWideChar arbeiten. Oder explizit CStringW verwenden.
-
Gdiplus::Bitmap *pBitmap = static_castGdiplus::Bitmap\*(img->Clone());
hmmm also bei mir stürzt mein programm bei dieser zeile ab
-
Hast du abgecheckt, ob img ein gültiger Zeiger ist? Vielleicht kann er ja das File nicht finden. Dieser Code funktioniert ansonsten einwandfrei. Hab ich schon lange so im Einsatz. GDI+ muss natürlich initialisiert sein.
-
sorry aber GDI+ sagt mir so nichts... hab das eben zum ersten mal gehört ... wie soll ich das initiallisieren ? also brauch das irgendwelche includes oder wie ?
edit:
#include <gdiplus.h>
#include <windows.h>hab ich gefunden das man die includieren muss nur auch damit geht es nicht
-
Source2702 schrieb:
GDI+ muss natürlich initialisiert sein.
Wäre ja nett gewesen, wenn Du das bereits im ersten Post erwähnt hättest, das man GDI+ initialisieren und linken muss.
Dann ist es aber wohl auch leicht zu finden:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms533798(v=vs.85).aspx
Beispiel:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms533895(v=vs.85).aspx
-
so also er stürzt immer noch ab, ich hab bisher folgendes gemacht:
// CVerstell-Meldungshandler #include <gdiplus.h> #include <windows.h> #include <objidl.h> using namespace Gdiplus; #pragma comment (lib,"Gdiplus.lib") BOOL CVerstell::OnInitDialog() { CDialog::OnInitDialog(); WCHAR *szFilename = L"C:\\verstellung_band_2.jpg"; Gdiplus::Image *img = Gdiplus::Image::FromFile(szFilename); Gdiplus::Bitmap *pBitmap = static_cast<Gdiplus::Bitmap*>(img->Clone()); HBITMAP hBitmap = NULL; delete img; Gdiplus::Status status = pBitmap->GetHBITMAP(Gdiplus::Color(0,0,0), &hBitmap); delete pBitmap; m_pic.SetBitmap(hBitmap); m_pic.RedrawWindow(); i=0; return TRUE; // return TRUE unless you set the focus to a control // AUSNAHME: OCX-Eigenschaftenseite muss FALSE zurückgeben. }
wieso stürzt das programm bei der zeile immer noch ab?
Gdiplus::Bitmap *pBitmap = static_cast<Gdiplus::Bitmap*>(img->Clone());
-
LordTerra schrieb:
so also er stürzt immer noch ab, ...
Gdiplus::Image *img = Gdiplus::Image::FromFile(szFilename); Gdiplus::Bitmap *pBitmap = static_cast<Gdiplus::Bitmap*>(img->Clone());
wieso stürzt das programm bei der zeile immer noch ab?
Nullzeiger ?
Welchen Wert hat img ?
Ich würde sicherstellen, das img und pbitmap gültige Zeiger sind.
-
ok scheinbar ist img = NULL das ist natürlich net gut, aber wie kann ich das ändern ? bzw was ist an meiner zeile
Gdiplus::Image *img = Gdiplus::Image::FromFile(szFilename);
falsch?
-
Ich gehe mal davon aus, dass die Datei auch wirklich existiert. Hast du Gdi+ initialisiert?
Gdiplus::GdiplusStartupInput gdiplusStartupInput; Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
Macht man z.B. in InitInstance.
-
ok wenn ich die 2 zeilen hinzufüge will er m_gdiplusToken irgendwie initialisieren
welchen datentyp braucht denn nun diese variable?edit:
ULONG_PTR muss es sein ok
ich glaub ich habs...
-
#include <gdiplus.h> #include <windows.h> #include <objidl.h> using namespace Gdiplus; #pragma comment (lib,"Gdiplus.lib") BOOL CVerstell::OnInitDialog() { CDialog::OnInitDialog(); ULONG_PTR m_gdiplusToken; Gdiplus::GdiplusStartupInput gdiplusStartupInput; Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL); WCHAR *szFilename = L"pic\\verstellung band 2.jpg"; Gdiplus::Image *img = Gdiplus::Image::FromFile(szFilename); if(img!=NULL){ Gdiplus::Bitmap *pBitmap = static_cast<Gdiplus::Bitmap*>(img->Clone()); HBITMAP hBitmap = NULL; delete img; Gdiplus::Status status = pBitmap->GetHBITMAP(Gdiplus::Color(0,0,0), &hBitmap); delete pBitmap; m_pic.SetBitmap(hBitmap); m_pic.RedrawWindow(); } i=0; return TRUE; // return TRUE unless you set the focus to a control // AUSNAHME: OCX-Eigenschaftenseite muss FALSE zurückgeben. }
ok so funktioniert es
m_pic ist mein PictureControlvielen dank für die hilfe.
-
so jetzt noch eine kleine letzte frage:
konvertierung:
ursprünglich:
WCHAR *szFilename = L"pic\\verstellung band 2.jpg";jetzt möchte ich gern:
CString filename="test.jpg";WCHAR *szFilename = filename; <--- das geht natürlich nicht hier benötige ich die hilfe
-
Das GdiPlusStartup solltest du nur 1x aufrufen. Eben wie geschrieben in InitInstance.
Statt CString nimmst du explizit CStringW.
Also z.B.:CStringW csFileName = "C:\\Test.jpg"; Gdiplus::Image *img = Gdiplus::Image::FromFile(csFileName);
-
ok thx so gings
dank euch