Bilddatei in MFC laden

RuNDUMiEzE

Grünschnabel
Guten Morgen Leute,
ich hab ein kleines Problem. Und zwar möchte ich ein Bmp o. JPG-Datei in ein MFC-Fenster laden, so quasi

void CMainWnd::OnPaint()
{
// Grafik
Graphics graphPic(pPicCDC->m_hDC);
IImage image(L"img\\Test.jpg");
graphPic.DrawImage(&image, 0,0);
}
leider weiss ich nicht welchen Header ich dort includieren muss :eek:(. Na ja vielleicht hat jemand ja ne andere Lösung. Danke im Vorraus.
 
Hi

Ich möchte ein externes Bild laden und ausdrucken!
Kann mir jemand sagen wie dies geht?
Am Besten währe es wenn man bmp,jpg und gifs laden könnte!

Bis jetzt habe ich es so versucht aber es gibt immer nur einen schwarzen Balken!
Code:
    m_iLeft=170;        // mm 
    m_iTop=10;          // mm 

    CBitmap bmp_kun; 
    if(bmp_kun.LoadBitmap("E:\\test.bmp"))
    {
    
    CDC SpeicherDC_kun; 
    SpeicherDC_kun.CreateCompatibleDC(dcPrint);
	SpeicherDC_kun.SelectObject(bmp_kun);
    SpeicherDC_kun.SelectObject(bmp_kun);
    dcPrint->StretchBlt( ((m_iHorizont/210) * m_iLeft), ((m_iVerdikal/297) * m_iTop), ((m_iHorizont/210) * 34), ((m_iVerdikal/297) * 24), &SpeicherDC_kun, 0, 0, 236,168, SRCCOPY ); 

    }

Ich habe bemerkt, dass LoadBitmap gar nicht fukntiniert! (Bild wird da nicht geladen!

Kann mir jemand helfen?
 
CPicutre Klasse

Hallo

ich habe mal eine Klasse gefunden. Mit dieser Klasse kann man einfach Bilder (.BMP .DIB .EMF .GIF .ICO .JPG .WMF) laden, anzeigen und Drucken.

Code:
CPicture m_picture;
m_picture.Load("mypic.bmp");
CRect rc;

rc.top = 0;
rc.left = 0;
rc.right = m_picture.m_Width;
rc.bottom = m_picture.m_Height.

m_picture.Show(pDC, rc);
Ich hoffe, du kannst die Klasse gebrauchen.
 

Anhänge

  • cpicture.zip
    6,1 KB · Aufrufe: 138
Vielen Dank!
Ich habe nun sicher bereits 1ne h versucht das ganze zu verstehen!
(Ohne Erfolg)

Ich werde eifach nicht schlau daraus!
Ich muss doch das file Picture.h includen oder?
Wieso soll das Bild dann wieder in die Varibale m_Picture?
Ich will es ja ausdrucken!
 
Ok
Ich kann das Bild drucken!
Aber nun ein anderes Problem!
Das Bild ist bei einem Drucker mit hoher Auflösung viel kleiner als bei einem mit kleiner Auflösung! Wie kann ich die grösse des Bilder bestimmen?

das 2. Problem ist, dass ich den Bildpfad aus einem eingabefeld herauslese.
Dort ist der "\" immer nur einmal vorhanden und ich kann somit das Bild nicht öffnen! Schreibt der Fileopendialg automatisch 2 "\" oder müsste man das bei dem auch noch anpassen?
 
hallo pinguinm

zu problem nummer 1:
Du kannst die Größe des Bildes auf dem Ausdruck selber festlegen, indem zu die physichen koordinaten zu logischen umrechnest, bzw. einen anderen mapmode verwendet. Hierzu verwendet man die Funktion SetMapMode.
Beispiel:

Code:
CSize sizeTotal;

sizeTotal.cx = 1980;
sizeTotal.cy = 2800;
double faktor;

pDC->SetMapMode(MM_ANISOTROPIC);   
pDC->SetWindowExt(sizeTotal);
faktor =  (double) pDC->GetDeviceCaps(HORZRES) / (double) sizeTotal.cx; 
long xExt   =  (long) (sizeTotal.cx * faktor);  
long yExt   =  (long) (sizeTotal.cy * faktor);  
 
pDC->SetViewportExt((int)xExt, (int)yExt);

Wenn ich bei diesem Beispiel hier dann beim Befehl m_picture.Show beim 2. Parameter (ein CRect) eine Width von 100 habe, so entspricht das auf deinem DIN A4 Blatt genau 1 cm.
Ich habe ein Beispielprojekt (SDI mit MFC). kann ich ev. hochladen.
 
Re: CPicutre Klasse

Original geschrieben von cFuchs
Hallo

ich habe mal eine Klasse gefunden. Mit dieser Klasse kann man einfach Bilder (.BMP .DIB .EMF .GIF .ICO .JPG .WMF) laden, anzeigen und Drucken.

Code:
CPicture m_picture;
m_picture.Load("mypic.bmp");
CRect rc;

rc.top = 0;
rc.left = 0;
rc.right = m_picture.m_Width;
rc.bottom = m_picture.m_Height.

m_picture.Show(pDC, rc);

Ich hoffe, du kannst die Klasse gebrauchen.

Mhm bei mir funktioniert das nicht. der Pointer pDC muss ja erst auf etwas referenzieren...

Kann mir jemand helfen?
 

Neue Beiträge

Zurück