Bilder verkleinern mit C++??



  • Hallo zusammen,

    ich habe noch nicht allzu viel Ahnung von Visual C++, habe aber durchaus Programmierkenntnisse. Ich möchte ein Programm schreiben mit dem ich Bilder drehen und verkleinern kann (für Internetseiten).
    Kann mir jemand sagen, ob soetwas mit Visual C++ möglich ist? Kann mir jemand vielleicht Bücher nennen, die das Thema behandeln? 🙄

    Viele Grüße!

    Michael



  • Drehung ist doch ganz einfach mit Drehmatrix realisierbar
    Skalierung ist mit Skalierungsmatirx möglich

    damit das ganze gut aussieht mußt du die Pixelwerte interpolieren



  • chief-mike schrieb:

    Hallo zusammen,

    ich habe noch nicht allzu viel Ahnung von Visual C++, habe aber durchaus Programmierkenntnisse.

    Lass ich raten, in Visual Basic hast du Kenntnisse? 😃 Mit c++ ist alles möglich, du musst es dir halt notfalls selber schreiben. Oder du greifst auf ne fertige Libary zu. Es ist aber kein Befehl in Ansi-C++ integriert, der Bilder dreht oder skaliert, soviel sollte doch klar sein, oder 😉 😃



  • ImageMagick kann sowas schon.
    Und wenn Du was derartiges unbedingt in ein C++-Programm einbauen möchtest, dann schau Dir Magick++ an!



  • Ich möchte im Prinzip ein Programm schreiben, in dem Bilder gedreht und verkleinert werden können und anschließend direkt per FTP auf einen Server geladen werden können. Womit mache ich das am besten? Ist da C++ nicht empfehlenswert?

    Meine Kenntnisse sind halt auf das typische Berufsschulwissen (PHP, C und VB) beschränkt. Deswegen würde es mir helfen, wenn ihr mir sagt, womit ich das am besten realisieren kann und welche Lektüre empfehlenswert ist...

    Danke für eure schnellen Antworten!

    Grüße!

    Michael



  • Natürlich geht das mit c++. Nur fragt sich, ob es sinnvioll ist das alles selber zu programmieren, wenn du null Ahnung hast. Dann ist es mühsam nur dafür das recht umfangreiche nötige Wissen anzueignen. Du musst halt auf fertige Libarys setzen, deine Frage müsste also lauten ob jemand sowas kennt. Das was du verlangst ist wohl in keiner Programmiersprache fest eingebaut nach dem Motto

    Bild->Drehen(3,14159);
    Bild->Skalieren(1,34);
    Bild->Hochladen(xyz);
    

    Recht easy wäre es z.B. mit dem C++ Builder... VC kenne ich nicht.



  • Es kommt darauf an wieviel Zeit du investieren willst, wie gut die Performance von dem Programm sein soll und wie portabel das ganze sein soll.

    Wie ich das herausgelesen habe, soll das wohl eine "abundanmaleinpaarbilderbearbeitundhochlad" - Lösung für windows sein.

    Dafür wäre VB sicher angemessen. Ich mache zwar selten (eigentlich nie) was mit VB, aber ich bin mir zu 99% sicher, das es fertige Funktionen zum Bearbeiten von Bildern und Benutzen von FTP gibt (MSDN ist dein Freund [oder würde man sagen "deine Freundin"]).
    Eine ähnlich bequeme Alternative, noch dazu Plattformunabhängig wäre Python.
    Da gibt es zB die PIL (Python Imaging Library) für die Bilder und Netzwerkfunktionen sind sowieso dabei.
    Aber wenn das ganze wirklich schnell sein soll - und damit meine ich nicht das du das Bild schneller bekommst, sondern das das ganze Möglichst viele Bilder pro Sekunde konvertieren soll - ist es wohl den Aufwand das ganze in C++ zu schreiben auch wert.



  • Für den FTP-Upload würde ich einfach ein externes Script/Programm benutzen.



  • Sowas kann man gaaaanz leicht als Shellscript realisieren, und genau so würde ich das auch machen.

    ChockoCookie: Performance? Das Bilddrehen macht ImageMagick eigentlich ziemlich performant und sonst ist wohl die Geschwindigkeit Deines Programms auch relativ egal; wenn man etwas auf einen FTP-Server hochladen möchte, dann ist idR nicht die Programmiersprache der Flaschenhals.



  • PHP kann auf jeden Fall Vergrößern und Verkleinern. Ob es auch Drehen kann weiß ich jetzt nicht, gehe ich aber fast von aus.



  • Warum soll man PHP bemühen, wenn ein einfaches

    convert -scale 1024x768 -rotate 90 eingabe.jpg ausgabe.jpg
    

    oä ausreichen würde?



  • Also mit PHP habe ich es auch schonmal programmiert. Nur ist es so, dass ich halt nicht immer die 2-5 MB großen Bilder auf den FTP laden will (wg. Traffic und Space).
    Mit PHP erstelle ich momentan die Thumbnails der Bilder, die ich hochgeladen habe. Was ich mit dem Programm bezwecken will, ist dass "normale" Leute, die Bilder machen, in der Lage sind diese Bilder verkleinert in den Zielordner auf dem FTP zu laden, ohne dass ich denen viel erklären muss. 😉

    Das sind größtenteils Leute, die froh sind, wenn se die Bilder von ihrer Kamera runterladen können...

    Und da ich Informatik studiere, sollte das auch ne recht gute Übung für mich sein. 😃



  • Wenn du eh VisualC++ benutzt, würde ich GDI+ empfehlen. Ist ab WinXP standardmäßig dabei, bei den vorgängern muß man eine ca. 4 MB große DLL mitkopieren (muß nichts installiert werden). Ist sehr einfach zu benutzen und MS hat es auch geschafft eine sehr schöne und intuitive 2D-Library zu designen!

    Bild laden?

    Image image(L"Grapes.jpg");
    

    Bild kippen?

    Point destinationPoints[] = {
       Point(200, 20),   // destination for upper-left point of original
       Point(110, 100),  // destination for upper-right point of original
       Point(250, 30)};  // destination for lower-left point of original
    Image image(L"Stripes.bmp");
    // Draw the image unaltered with its upper-left corner at (0, 0).
    graphics.DrawImage(&image, 0, 0);
    // Draw the image mapped to the parallelogram.
    graphics.DrawImage(&image, destinationPoints, 3);
    

    Ein Thumbnail erstellen?

    Image image(L"Compass.bmp");
    Image* pThumbnail = image.GetThumbnailImage(100, 100, NULL, NULL);
    graphics.DrawImage(pThumbnail, 10, 10, 
       pThumbnail->GetWidth(), pThumbnail->GetHeight());
    

    Tutorial:

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdicpp/gdiplus/gdiplus.asp

    Downloads:

    http://www.microsoft.com/downloads/results.aspx?productID=&freetext=gdi%2B&DisplayLang=en

    Viel Spaß! 😃



  • Warum werde ich eigentlich so hartnäckig ignoriert?
    Ich habs: Meine Lösung ist zu einfach, oder? 😉



  • Was ist denn convert? Kenne das Programm nicht. Weiteres Problem ist wohl das man keine Kontrolle drüber hat. Ich starte auch ungern externe Programme aus meinen Programmen. Auch wenn man vielleicht einen Rückgabewert zurück bekommt.



  • convert ist ein Programm von ImageMagick und bei Shellscripts ist das durchaus legitim.
    Wenn es (unsinnigerweise) trotzdem unbedingt C++ sein muss, dann eben Magick++ von ImageMagick, da macht man ungefähr sowas:

    // Achtung, Pseudocode.
    Image eingabe("eingabe.jpg");
    eingabe.scale(1024, 768);
    eingabe.rotate(90);
    eingabe.write("ausgabe.jpg");
    


  • Artchi schrieb:

    Weiteres Problem ist wohl das man keine Kontrolle drüber hat. Ich starte auch ungern externe Programme aus meinen Programmen. Auch wenn man vielleicht einen Rückgabewert zurück bekommt.

    Jo, ich benutze auch nicht gerne fertige Bibliotheken und so... man weiß nie was die so machen. Lieber alles selber schreiben, sonst hat man da echt keine Kontrolle. 🙄

    Wenn es doch Tools gibt, die die geforderte Arbeit erledigen und man nur ein paar Zeilen investieren muß um die richtig anzusprechen, warum dann bitte ein komplettes Programm schreiben. Es geht doch hier scheinbar vorrangig darum das Tool zu haben und benutzen zu können, also ist doch der einfachste und schnellste Weg der beste. Bei einem Lernprojekt ist das natürlich was anderes.

    MfG Jester



  • Vielen Dank nochmal für die zahlreichen und schnellen Antworten!

    Das sieht ja soweit relativ "einfach" aus... Ich denke, dass ich es auch so machen werde und die einzelnen Module quasi verwende... Man braucht das Rad ja nicht 2 mal erfinden.
    Dann müsste ich nur noch wissen wie ich ein Verzeichnis auslese, ne Vorschau erstelle und eine FTP-Verbindung aufbaue und mein Programm ist fertig. 😉

    Für solche Beispielseiten wie von Artchi bin ich immer dankbar.

    Viele Grüße!

    Michael



  • Jester schrieb:

    Jo, ich benutze auch nicht gerne fertige Bibliotheken und so... man weiß nie was die so machen. Lieber alles selber schreiben, sonst hat man da echt keine Kontrolle. 🙄

    Du hast mich falsch verstanden. Es geht mir nicht bei "unter Kontrolle haben" nicht um Sicherheit (hui, es könnte ja was schlimmes auf meinem PC passieren), sondern um die Kontrolle eines Arbeitsvorgangs. In dem Fall um das skallieren. Was ist wenn etwas schief geht? Wie bekomme ich von einem externen Programm eine sinnvolle Fehlermeldung zurück? Wie gesagt, es kann natürlich ein Rückgabewert zurück kommen. Aber mit einer Bibliothek kann ich z.B. eine Exception bekommen. Weiterhin kann bei einem Batchprozess (z.B. mehrere 100 Bilder convertieren) das immer wieder laden von EXE-Dateien die Laufzeitgeschwindigkeit negativ beeinflussen.

    Insgesamt nehme ich lieber eine Library, z.B. die GDI+ oder deine vorgeschlagene. Ich wollte keinesfalls sagen, das ich den Kram selbst schreiben will.



  • Artchi: Bei Shellscripts ist das aber kein Problem und wie gesagt, wer (warum auch immer) unbedingt C++ einsetzen möchte, der kann Magick++ verwenden.


Anmelden zum Antworten