Ansatz-Frage bei Zusammensetzung mehrerer Bilder

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ansatz-Frage bei Zusammensetzung mehrerer Bilder

    Hey ihr,

    ich möchte mir einen kleinen Algorithmus schreiben, mit dem ich mehrere Bilder in eines zusammenfassen kann (sozusagen eine Collage). Diesbezüglich habe ich allerdings noch nie etwas gemacht, daher wollte ich euch mal fragen, wie ihr denn die Herangehensweise üblich / sinnvoll ist.
    Erzeugt man da programmatisch eine View mit der zuvor ausgerechneten Größe, zeichnet dort die einzelnen Bilder rein und speichert das Gesamte dann als Bild ab (wie?) oder ist dieser Denkansatz ungünstig?
    Ich würde mich über einen Denkanstoß oder ein Googleschlagwort freuen! ;)

    Gruß

    PS: Geht in Swift vielleicht: let collage = bildA + bildB? <X
  • Im Fall eine Collage würde ich ander heran gehen. einfach für jedes Image ein ImageView und das darin zeigen. Da kannste die dann auch gleich Positioniere, Drehen, Zooem mit Filtern versehen wie Du lustig bist und am Ende machst du aus dem RootView ein Image mit renderInContext.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • gritsch schrieb:

    Falls das gedruckt werden soll, dann nicht vergessen zuerst die größe des views ordentlich aufblasen bevor es als bild gespeichert wird denn das bild wird immer mit 72 dpi gespeichert (soviel ich mich erinner...)
    Naja, ich denke mal das Bild wird gar nicht in DPI gespeichert sondern nur in Pixeln.
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    gritsch schrieb:

    Falls das gedruckt werden soll, dann nicht vergessen zuerst die größe des views ordentlich aufblasen bevor es als bild gespeichert wird denn das bild wird immer mit 72 dpi gespeichert (soviel ich mich erinner...)
    Naja, ich denke mal das Bild wird gar nicht in DPI gespeichert sondern nur in Pixeln.
    jup, aber selbst wenn man die native auflösung eines 5k-iMacs verwendet ist das für den druck normal zu schlecht (weil eine collage druckt man ja nicht auf A3...)
  • gritsch schrieb:

    Thallius schrieb:

    gritsch schrieb:

    Falls das gedruckt werden soll, dann nicht vergessen zuerst die größe des views ordentlich aufblasen bevor es als bild gespeichert wird denn das bild wird immer mit 72 dpi gespeichert (soviel ich mich erinner...)
    Naja, ich denke mal das Bild wird gar nicht in DPI gespeichert sondern nur in Pixeln.
    jup, aber selbst wenn man die native auflösung eines 5k-iMacs verwendet ist das für den druck normal zu schlecht (weil eine collage druckt man ja nicht auf A3...)
    Naja, wenn Du das Bild auf A3 oder größer, in vernünftiger Qualität (mind. 300DPI) drucken willst, dann wirst du eh an die Grenzen des iPhone/iPad Rams stossen und dann funktioniert mein Konzept natürlich auch nicht mehr. Aber auch kein anderes das mit einem Speicher arbeitet. Dann must du anfangen das Bild zu teilen und in Bereichen arbeiten.

    Aber wer druckt heutzutage überhaupt noch?
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • naja, 100 megapixel (welche man wohl nicht unbedingt braucht) sind 300 MB im speicher - das sollte ein iPad doch schaffen? und sonst verwendet man eben "nur" 25 MP dann sinds 75 MB im speicher.

    übrigens gehts hier wohl nicht um iPhone/iPad/iPod sondern um OS X welches ja selten auf maschinen läuft die weniger als 4 GB RAM haben...
  • Danke für die vielen Antworten!
    Weiß gar nicht, wo ich anfangen soll... Erst mal: @gandhi & @macmoonshine: Auch wenn das mit Swift irgendwie realisierbar wäre (wie in ähnlicher Weise auch in einem diesjährigem Macoun-Vortrag gezeigt wurde), war das scherzhaft gemeint. Ich bin zwar ein wenig am Swift lernen, aber momentan schreibe ich meine Sachen trotzdem lieber in Objective-C. ;)

    gritsch schrieb:

    zur ursprünglichen frage: ja so kannst du es machen. also ein view erstellen und da reinmalen. das ganze kannst du dann als png, tiff oder was auch immer speichern.
    du kannst aber auch einen CGBitmapContext verwenden.
    Das hört sich intuitiv an. Um die View dann grafisch darzustellen bette ich sie in eine ScrollView, oder?
    Was ist der Vorteil am CGBitmapContext? Muss der Context immer in ein Bild "gerendert" werden, um grafisch dargestellt zu werden oder wie funktioniert das?

    Thyraz schrieb:

    Wenn du es nicht als Bild speichern willst ist das direkte Zeichnen in die View sicher der normale Ansatz.
    Aber wenn du das Bild speichern / cachen willst würde ich auch eher in einen Context zeichnen, das Bild rausziehen und das Bild dann eben bei Bedarf darstellen.

    gritsch schrieb:

    Falls das gedruckt werden soll, dann nicht vergessen zuerst die größe des views ordentlich aufblasen bevor es als bild gespeichert wird denn das bild wird immer mit 72 dpi gespeichert (soviel ich mich erinner...)

    Also das Ganze soll in hoher Qualität als Bild gespeichert werden. Zunächst soll es aber grafisch dargestellt werden (sozusagen als Vorschau). Die Pixelbreite des Bildes soll die Summe aller Bildbreiten betragen, die Bilder sollen also nicht nicht verkleinert werden.

    Ich les mich auf jeden Fall mal ein wenig in CoreGraphics ein, mit dem BitmapContext hatte ich nämlich bis dato noch nichts zu tun.

    Danke noch mal!
  • Mit dem bitmapimagecontext erstellst du sozusagen einen speicher für ein bild einer bestimmten größe.
    dort kannst du dann mit den CGContext-zeichenmethoden reinzeichnen. Zur anzeige auf dem bildschirm kannst du den gleichen code verwenden aber eben anstelle des imagecontext verwendest du den aktuellen grafikkontext (sodass es dann am bildschirm angezeigt wird). Bei der ausgabe auf den bildschirm kannst du auch eine scaling-transformation verwenden wenn du magst ;)
  • gritsch schrieb:

    Mit dem bitmapimagecontext erstellst du sozusagen einen speicher für ein bild einer bestimmten größe.
    dort kannst du dann mit den CGContext-zeichenmethoden reinzeichnen. Zur anzeige auf dem bildschirm kannst du den gleichen code verwenden aber eben anstelle des imagecontext verwendest du den aktuellen grafikkontext (sodass es dann am bildschirm angezeigt wird). Bei der ausgabe auf den bildschirm kannst du auch eine scaling-transformation verwenden wenn du magst ;)
    Danke, du hast bei mir gerade mit wenigen Sätzen einige Lichter angemacht! :)
  • gandhi schrieb:

    macmoonshine schrieb:

    Was soll das denn genau bedeuten?
    Vollkommen wurscht. In Swift kannst Du Operatoren überladen bzw. selbst-definieren. Das ist cool. Wer fragt da nach Sinn oder Lesbarkeit des Codes? Immer diese Zweifler...
    Und Swift ist obfuscated genug, dass sich der +-Operator denkt, wie die einzelnen Bilder platziert sein sollen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Amin Negm-Awad schrieb:

    Osxer schrieb:

    PS: Geht in Swift vielleicht: let collage = bildA + bildB?
    Jetzt mal angenommen, das würde gehen: Welches Problem der Programmierung der gewünschten Software würde das lösen?
    Gar keine. Wie schon gesagt, das ist natürlich Quatsch. ;)
    Durch ein einfaches "+" sind ja noch nicht die Abstandswerte, Reihenfolge, Rastergröße etc. etc. weitergegeben. Und selbst wenn man das irgendwie mit reinpackt: Die Schreibweise bietet einem ganz normalem Methodenaufruf eigentlich gar keine Vorteile, aber würde auch noch zusätzliche Implementierungen benötigen.