Bilder proportional laden

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

  • Bilder proportional laden

    Hallo, ich brauche bitte hilfe bei einem Bildbearbeitungsprogramm, dass ich mit GM6.1 programmiere.

    Folgendes:

    GML-Quellcode

    1. file=get_open_filename('Bilder|*.bmp;*.gif;*jpg','');
    2. background_replace(back,file,false,false,false);

    Nun möchte ich das Bild immer proportional in einem 640x480 Rahmen zeichnen.
    Dazu verwende ich:

    GML-Quellcode

    1. draw_background_stretched(global.bild,81,63,640,480);

    Nun werden alles geladenen Bilder langgezogen.
    Was aber wenn das bild vielleicht 500x900 hat? Oder 800*200?
    Ich möchte das es immer genau an einer Seite anpasst und nicht verzogen wird.
    Also 500x900 wird um 420px bei 480 heraus gezeichnet.
    Oder bei 800x200 um 160px bei 640. Das will ich aber nicht!

    Ich hoffe ihr versteht was ich meine und könnt mir helfen.
    57 6F 77 2C 20 64 61 73 20 68 61 73 74 20 64 75 20 67 61 6E 7A 20 61 6C 6C 65 69 6E 20 67 65 73 63 68 61 66 66 74 2E 20
  • bildbreite : bildhöhe = 640 : x // bildbreite : bildhöhe entspricht der neuen fixen breite 640 zur proportionalen neuen höhe x

    das ganze umgeformt:

    x = 640 * bildhöhe / bildbreite

    draw_background_stretched(global.bild,81,63,640,x);

    dann bleibt die proportion immer gleich


    btw.. hattest du in der schule kein mathematik?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Michi ()

  • Klar doch ich depp.
    Ist doch logisch. Voll verplant :)
    Obwohl es nicht ganz genau ist. Lässt sich aber leicht aufheben. .
    ....
    Trotzdem Danke!
    Ich sollte bevor ich Themen schreibe a bissle nachdenken.

    Für alle die auch sowas brauchen können, hier:
    Maus-"Left Pressed"-Event:

    GML-Quellcode

    1. file=get_open_filename('Bilder|*.bmp;*.gif;*jpg','');
    2. background_replace(back,file,false,false,false);
    3. bw=background_get_width(back);
    4. bh=background_get_height(back);
    5. if bw>640 and bh<480 {ww=640; hh=480*(bh/bw)};
    6. if bh>480 and bw<640 {ww=640*(bw/bh); hh=480};
    7. if bw<640 and bh<480
    8. {
    9. if bw>bh {ww=640; hh=640/(bw/bh)};
    10. if bh>bw {ww=480/(bh/bw); hh=480};
    11. };
    12. if bw=640 and bh=480 {ww=640; hh=480};
    Alles anzeigen


    "Create"-Event:

    GML-Quellcode

    1. global.bild=back;
    2. bw=background_get_width(back);
    3. bh=background_get_height(back);
    4. ww=640;
    5. hh=480;

    Wobei "back" einfach ein Background ist, wo man vielleicht schon reinschreiben kann, wie "Bitte Bild laden", oder sowas.

    "Draw"-Event:

    GML-Quellcode

    1. draw_background_stretched(global.bild,81,63,ww,hh);


    Achtung: Es können keine großen Bilder geladen werden. Getestet habe ich max. 1024x768px.
    Ich weiß zwar nicht woran das liegt, aber ich denke mal das ist wegen GM6.1!
    Oder vielleicht am Arbeitspeicher? Keine Ahnung.
    57 6F 77 2C 20 64 61 73 20 68 61 73 74 20 64 75 20 67 61 6E 7A 20 61 6C 6C 65 69 6E 20 67 65 73 63 68 61 66 66 74 2E 20

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von DanielGM61 ()