JPG in C++ einlesen
-
cico81 schrieb:
Mein Hauptproblem ist das Anzeigen des JPG-Bildes. Vielleicht habe ich die Parameter bei der Picture Box nicht richtig eingestellt, oder muss das JPG-Bild als .bmp Casten und als Bitmap darstellen?? Oder habe ich eine andere Möglichkeit?
Das Du ein BMP als JPG casten willst beweist, das Du von Dateiformaten (und/oder casten) wirklich keine Ahnung hast.
Die vermutlich "billigste" Lösung für dein Bild wäre vermutlich:
// Gespeichertes Bild aus Variable löschen m_Bitmap.DeleteObject(); // Variable neues Bild zuweisen // m_Bitmap.LoadBitmap(IDB_BITMAP2); CImage image; image.Load(_T("C:\\image.jpg")); m_Bitmap.Attach(image.Detach());
Wobei der Pfad hier fest eincodiert ist; weiss ja nicht was Deine CEinleser so
macht ...
-
Ich habe mehrfach erwähnt, dass ich ein Anfänger bin merano. Das, was CEinleser machen muss, habe ich auch schon beschrieben. Ich brauche mindestens eine primitive CEinleser-Klasse, wo man über die GUI auf ein Button clickt, .JPG-Datei auswählen kann und diese anschließend angezeigt wird. Also genau das Projekt, was sich auf der Seite befinden, wo ich den Link in einem vorherigem Beitrag eingefügt habe, nur mit .JPG anstatt .bmp. Die Klasse CImage ist das passende, muss es nur irgendwie integrieren. Ich weiß nur nicht, wie ich die Variablen deklarieren muss.
-
cico81 schrieb:
...Also genau das Projekt, was sich auf der Seite befinden, wo ich den Link in einem vorherigem Beitrag eingefügt habe, nur mit .JPG anstatt .bmp. Die Klasse CImage ist das passende, muss es nur irgendwie integrieren. Ich weiß nur nicht, wie ich die Variablen deklarieren muss.
Welche Variablen ? Copy & Paste sollte funktionieren.
(Habe es mit dem verlinkten Sourcecode bereits ausprobiert.)Wir erwarten allerdings auch von einem Anfänger eine gewisse Selbstbeteiligung.
Wir helfen gerne, aber wir machen keine Auftragsarbeit. Erst wenn Du es wirklich ausprobiert hast
und trotz eigener Bemühungen noch Probleme auftauchen kannst Du die betreffenden Stellen mit
passender Beschreibung und Frage posten.Und der CEinleser war definitiv kein Bestandteil des verlinkten Sourcecodes.
Wie und wo Du ihn eingebaut hast und welches Problem dabei einstanden sein könnte ist unklar.
-
Ich sitze seit mehreren Stunden/Tagen dran. Ich würde dich daher bitten, ohne Wissen, nicht einfach zu kritisieren. Das Originalprojekt aus der Seite läuft auch bei mir. Aber mit Copy&Paste funktioniert es leider nicht. Erwarte auch nicht, dass mir einer alles fertig macht. Brauche nur konstruktive Hinweise, in Bezug auf die Problemstellung. Freundlicherweise wurden einige Tipps gegeben, konnte ich aber nicht erfolgreich umsetzen. Es würde mir schon sehr helfen, wenn ich die Fehler beseitigen könnte, die hier aufgeführt sind: http://www.pic-upload.de/view-19149889/Unbenannt.jpg.html
void CEinleserDlg::OnBnClickedEinlesen()
{ //Benötigte Variablen erstellen
164 CFileDialog m_File(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Bilder (.bmp)|.bmp;||");CString str_filename;
char Zeichen;// File Dialog öffnen und Ergebnis auffangen
if(m_File.DoModal()==IDOK)
{
// Gewählten Dateinamen ermitteln
str_filename=m_File.GetPathName();// Länge des Dateinamens ermitteln
int laenge=str_filename.GetLength();// Alle \ mit \\ ersetzen
for(int i = 0; i < laenge; i++)
{
Zeichen=str_filename.GetAt(i);
if(Zeichen=='\')
{
184 str_filename.Insert(i, "\");
i+=1;
}
}// Bild anzeigen
m_ctlBild.SetBitmap((HBITMAP)LoadImage( NULL , str_filename ,IMAGE_BITMAP , 100 , 100 , LR_LOADFROMFILE | LR_CREATEDIBSECTION ));
}
}Den Fehler in der Zeile 164 hatte ich in einen vorherigen Beitrag als das hochgeladene Bilddatei reingestellt.
-
cico81 schrieb:
Ich sitze seit mehreren Stunden/Tagen dran. Ich würde dich daher bitten, ohne Wissen, nicht
einfach zu kritisieren. Das Originalprojekt aus der Seite läuft auch bei mir. Aber mit Copy&Paste funktioniert es leider nicht.Da ist wieder so eine Stelle, die und immer wieder nervt!!
Funktioniert nicht, ist keine sinnvolle Beschreibung. Was läuft nicht und wie sieht die Fehlermeldung aus.
cico81 schrieb:
Erwarte auch nicht, dass mir einer alles fertig macht. Brauche nur konstruktive Hinweise, in Bezug auf die Problemstellung. Freundlicherweise wurden einige Tipps gegeben, konnte ich aber nicht erfolgreich umsetzen.
Schon wieder: Was hast du genau probiert und was funktionierte dabei nicht ?
cico81 schrieb:
Es würde mir schon sehr helfen, wenn ich die Fehler beseitigen könnte, die hier aufgeführt sind: http://www.pic-upload.de/view-19149889/Unbenannt.jpg.html. ...
Den Fehler in der Zeile 164 hatte ich in einen vorherigen Beitrag als das hochgeladene Bilddatei reingestellt.Mit anderen Worten: Bitte macht es endlich fertig ...
Das ganze ist mit den bereits gegebenen Hilfen so trivial einfach, das es schon fast weh tut.
Hier nochmal zum mitschreiben
1. Vorlage WechselBild von http://www.coding-help.de/bild.html mit VS2010
geöffnet.2. stdafx.h: Warnung beseitigen durch zusätzliche defines
#define WINVER 0x501 #define _WIN32_WINNT 0x501 #include <atlimage.h> // Unterstützung von CImage
3. Methode ::OnButton1() auf (externes) jpg-Bild umgestellt
void CWechselBildDlg::OnButton1() { CString pathName = "C:\\image2.jpg"; // Mein Default Bild if(n_Merker==0) { // Gespeichertes Bild aus Variable löschen // Gespeichertes Bild aus Variable löschen m_Bitmap.DeleteObject(); // Variable neues Bild zuweisen CImage image; HRESULT hr = image.Load( pathName ); if(SUCCEEDED(hr)) { // not FAILED(hr) m_Bitmap.Attach(image.Detach()); } else { // Variable internes default-Bild zuweisen m_Bitmap.LoadBitmap(IDB_BITMAP2); } // Dem Bild-Element das geladene Bild zuweisen m_ctlBild.SetBitmap(m_Bitmap); // Merker setzen n_Merker=1; } ... }
Der geänderte Code versucht ein externes Bild aus pathName zu laden.
Damit das ganze nicht abstürzt, wenn das Bild nicht geladen werden kann,
war es sinnvoll eine Fehlerbehandlung zu implementieren.Wenn das Bild geladen werden konnte, wird es angezeigt, sonst wird das interne Default-Bild verwendet.
4. CFileDialog einbauen
MSDN Example for CFileDialog::DoModal hinzugefügt
http://msdn.microsoft.com/en-us/library/3xb6dhth.aspxsiehe auch: MSDN CFileDialog::CFileDialog
http://msdn.microsoft.com/en-us/library/wh5hz49d.aspx// NEUUUU CString pathName = "C:\\image2.jpg"; // szFilters is a text string that includes two file name filters: // "*.jpg" for "JPGType Files" and "*.*' for "All Files." TCHAR szFilters[]= "MyJPG Files (*.jpg)|*.jpg|All Files (*.*)|*.*||"; // Create an Open dialog; the default file name extension is ".jpg". CFileDialog fileDlg (TRUE, _T("jpg"), pathName, OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this); // Display the file dialog. When user clicks OK, fileDlg.DoModal() returns IDOK. if( fileDlg.DoModal() == IDOK ) { pathName = fileDlg.GetPathName(); } // END NEUU // Variable neues Bild zuweisen CImage image; ...
5. Das ganze kompiliert und ausprobiert - FERTIG!!
Mein Gott; ich mach den Karton an dieser Stelle zu und werde diese Stellen nicht weiter kommentieren.
-
1. Man braucht keinen kompletten Source-Code für mich erstellen, da ich bereits durch intensive Suche auf nützliche Projekte gestoßen bin, vor allem auf der genannten Seite.
2. Wenn ich das Projekt herunterlade und öffne, funktioniert es, jedoch wenn ich die Funktionen in meinem Projekt einfüge, klappt es nicht.
3. Die Aufgabenstellung und bzw. Mindestanforderung habe ich bereits niedergeschrieben. Die Fehler wurden schriftlich und mit Bildern beschrieben. Es wurde danach gefragt, ob einer weiß, woran es liegen kann. Allein eine Datei zu öffnen klappt nicht. CFileDialog m_File(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Bilder (.bmp)|.bmp;||"); Bei der Instanz TRUE zeigt es ein Problem, dass es nicht definiert wäre, obwohl es definiert ist. Benutze Visual Studio 2012.
4. Es freut mich, wenn du es eventuell gut drauf hast. Das gibt dir trotzdem kein Recht herabsetzend zu reden. Du solltest von deinem hohen Ross runterkommen. Entweder gebe nur Tipps und Hilfestellungen, ohne abwertende Kommentare, oder schreibe gar nichts. Ich weiß nicht, ob ich dir danken soll, oder dir auf die Fresse hauen soll. Trotzdem danke.
-
...
-
Ich habe keine Lust mich ebenfalls ständig zu wiederholen. Ich sage nicht nur es klappt nicht, sondern schildere auch die Sachlage anhand Beschreibung und Bilder. Die, von merano erwähnte, Seite (http://msdn.microsoft.com/en-us/library/wh5hz49d.aspx), hatte ich bereits gefunden. Nach diesem Code kann ich auch ein Dialogfenster öffnen und eine Datei auswählen, aber ohne Begrenzung. Sobald ich außer TRUE andere Instanzen einsetze, erscheint der Fehler, was ich geschildert und gezeigt habe. Habe anstatt TRUE auch 1 eingesetzt, ging auch nicht. (" http://www.fotos-hochladen.net/view/unbenannta2rg9yhnlx.jpg "). Danke für eure Hilfe, auch wenn einige Kommentare nicht zum guten Anstand gehörten. Ich werde mich alleine durchkämpfen. Außerdem Swordfish, meinen Kenntnisstand habe ich bereits Preisgegeben. Alles Gute.
-
Und? Der Online Parser versteht Deinen Code nicht...
Was sagt der Compiler?
-
Hallo Martin,
das ist der angezeigte Fehler vom Compiler.
http://www.fotos-hochladen.net/thumbnail/unbenanntjrb1m95usp_thumb.jpg
-
...
-
Freund der Blasmusik.
Du compilierst dein Projekt als UNICODE und verwendest 8 Bit Literale.
Das kann nicht gehen.Mach ein _T() um deine String-Literale rum.
-
hustbaer, du bist der Beste!!!! Danke dir vielmals! Mit _T() um die Stringliterale hat es zwar nicht geklappt, aber der Tipp mit dem Unicode war Goldwert.