Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

1

21.03.2012, 21:14

SFML 2 - sf::RenderWindow - Wie erstelle ich einen Screenshot?

Hallo,

Habe folgendes Problem:
Ich habe jetzt ein Objekt aus der RenderWindow Klasse:

sf::RenderWindow screen;

Und habe ein Image:

sf::Image Screenshot;

Jetzt steht auf einer sfml Seite, dass ich mit screen.capture() einen Screenshot machen kann, der dann in einem Image gespeichert wird.
Aber wie speicher ich das in dem Image Screenshot? Die capture Funktion übernimmt keine Parameter! Und google spuckt da auch nichts hilfreiches aus. Kann mir bitte jemand helfen?

Gruß,
Luca

valentin

Treue Seele

Beiträge: 212

Wohnort: Schweiz

Beruf: Schüler

  • Private Nachricht senden

2

21.03.2012, 21:22

Ich empfehle dir nochmal in die Doku zu schauen.
visit me on deviantArt!
http://v-alentin.deviantart.com/

There is no programming language, no matter how structured, that will prevent programmers from making bad programs. //Larry Flon

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

3

21.03.2012, 21:34

Ja, das habe ich schon. Aber daraus werde ich ja einfach nicht schlau:

Image sf::RenderWindow::capture()

Soll ich da etwa schreiben:

Screenshot sf::RenderWindow::capture()

Weil das funktioniert nicht. Ich weiß nicht wie ich die capture() funktion mit dem Image 'Screenshot' verbinden soll...

Greek

Frischling

Beiträge: 18

Wohnort: Nähe Darmstadt

Beruf: Informatik-Student

  • Private Nachricht senden

4

21.03.2012, 21:35

Hi,

so:

C-/C++-Quelltext

1
2
3
                sf::Image screenshot = m_window.Capture();

                screenshot.SaveToFile("meinScreenshot.jpg");


Gruß Greek

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

5

21.03.2012, 22:04

hab leider immer noch ein kleines Problem, aber danke schonmal für die Antwort:
Wenn ich das wie oben beschrieben mache:

C-/C++-Quelltext

1
2
3
4
5
sf::RenderWindow screen;

sf::Image Screenshot = screen.capture();

Screenshot.saveToFile("Screenshot.jpg");


Dann kommt folgende Fehlermeldung:

Quellcode

1
2
3
4
5
6
1>------ Erstellen gestartet: Projekt: SFML sample Application, Konfiguration: Release Win32 ------
1>  main.cpp
1>main.cpp(58): error C2065: 'Screenshot': nichtdeklarierter Bezeichner
1>main.cpp(58): error C2228: Links von ".saveToFile" muss sich eine Klasse/Struktur/Union befinden.
1>          Typ ist ''unknown-type''
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Und wenn ich es so mache:

C-/C++-Quelltext

1
2
3
4
5
6
sf::RenderWindow screen;
sf::Image Screenshot;

Screenshot = screen.capture();

Screenshot.saveToFile("Screenshot.jpg");


Was ja eigentlich keinen Unterschied sein dürfte, funktioniert es zwar ohne Fehlermeldung, aber wenn ich schließlich in meiner Projektmappe nachsehe, ist dort kein 'Screenshot.jpg'

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

6

21.03.2012, 22:28

Zitat

aber wenn ich schließlich in meiner Projektmappe nachsehe, ist dort kein 'Screenshot.jpg'

Ohne jemals mit SFLM gearbeitet zu haben, denke ich mal, dass die Datei nicht im Projektordner sondern im Anwendungsordner gespeichert wird.

Probier doch zb. mal "saveToFile("C:\\Screenshot.jpg");"

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

7

21.03.2012, 22:31

ja, das habe ich auch schon probiert, aber das funktioniert auch nicht. Ist auch das erste mal, dass ich mit sfml arbeite...

Greek

Frischling

Beiträge: 18

Wohnort: Nähe Darmstadt

Beruf: Informatik-Student

  • Private Nachricht senden

8

21.03.2012, 22:36

Erstellst du überhaupt ein Fenster? Hier mal fertiger Code, musst nur schauen ob Groß- Klein bei dir stimmt, das wurde ja erst geändert.



C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "windows.h"



int main(void)

{



    sf::RenderWindow screen(sf::VideoMode(800,600),"Dein Titel");



    Sleep(3000); // Fenster mal anschauen ;)



    sf::Image screenshot = screen.Capture();



    screenshot.SaveToFile("meinScreenshot.jpg");



    return 0; 

}

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

9

21.03.2012, 22:43

Ja ich erstelle ein Fenster. Das seltsame ist, wenn ich das Image 'Screenshot' in der selben Zeile erstelle, in der ich auch die capture() Funktion benutze, sagt er mir, mein 'Screenshot' sei nicht definiert...

Hier ich schicke mal den ganzen Quellcode:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <SFML/Graphics.hpp>
 
int main()
{
        sf::RenderWindow Window(sf::VideoMode(800, 600, 32), "SFML Sample Application");
 
        sf::Texture Image;
        if (!Image.loadFromFile("Glados.png"))
            return 1;

        sf::Sprite Sprite;
        Sprite.setTexture(Image);
        Sprite.setPosition(100.0f, 30.0f);
        Sprite.setRotation(30.0f);
        Sprite.setScale(.5f, .3f);
        Sprite.setColor(sf::Color(255, 0, 0, 128));

        sf::Sprite Sprite2;
        Sprite2.setTexture(Image);
        Sprite2.setPosition (200.0f, 200.0f);
        Sprite2.setScale(.8f, .8f);

        sf::Texture Image2;
        if (!Image2.loadFromFile("Moon.png"))
            return 1;

        sf::Sprite Sprite3;
        Sprite3.setTexture(Image2);
        Sprite3.setPosition(400.0f, 200.0f);
        Sprite3.setScale(.1f, .1f);

        while (Window.isOpen())
        {
                sf::Event Event;
                while (Window.pollEvent(Event))
                {
                        switch (Event.type)
                        {
                        case sf::Event::Closed:
                                Window.close();
                                break;
                        default:
                                break;
                        }
                }
 
                Window.clear(sf::Color(0, 255, 255));
                Window.draw(Sprite);
                Window.draw(Sprite2);
                Window.draw(Sprite3);
                Window.display();

                sf::Image Screenshot = Window.capture();
        }

        Screenshot.saveToFile("Screenshot.jpg");
 
        return 0;
}

Greek

Frischling

Beiträge: 18

Wohnort: Nähe Darmstadt

Beruf: Informatik-Student

  • Private Nachricht senden

10

21.03.2012, 22:45

Dein Image geht kaput wenn du den Scope verlässt, würde das auch nicht in eine Schleife machen

Werbeanzeige