Seite 1 von 1

Screenshot aus C-Programm

Verfasst: So Mai 17, 2009 6:17 pm
von +Fuss+
Kennt jemand eine Funktion mit der man einen Screenshot (wie normal über die Druck-Taste) in einer Datei abspeichern kann? Hab schon Google gequält, aber nichts brauchbares an Code gefunden.
Wenn möglich sollte das ganze Plattformunabhängig sein, wenn es nur auf Linux läuft ist es erstmal auch nicht schlimm.

Schonmal danke im vorraus!

MfG Fuss

Re: Screenshot aus C-Programm

Verfasst: So Mai 17, 2009 6:25 pm
von Dirty Oerti
Hm, am besten lässt du zur Laufzeit erkennen, auf welcher Plattform du dich befindest (oder regelst das durch Defines).
Dann verfährst du, je nach System:

Unter Linux kannst du einen Screenshot machen, in dem du z.B. ein externes Programm (feh) aufrufst.
Das musst du halt als "Abhängigkeit" zu deinem Programm hinzufügen.
Wobei, es müsste auch über den XServer gehen.

Unter Windows..keine Ahnung, du könntest natürlich einen Tastendruck simulieren, aber das ist iwie ein rechter Umweg.
Mal schaun, ob man dazu was findet...

Re: Screenshot aus C-Programm

Verfasst: So Mai 17, 2009 6:30 pm
von nufan
Mit SDL_SaveBMP kannst du den Inhalt eines Surfaces als BMP speichern.
Also z.B.

Code: Alles auswählen

SDL_SaveBMP (screen, "screen.bmp");
http://www.libsdl.org/cgi/docwiki.cgi/SDL_SaveBMP

EDIT:
Vergessen zu fragen: es ist doch kein reines Konsolenprogramm, oder?

Re: Screenshot aus C-Programm

Verfasst: So Mai 17, 2009 6:37 pm
von Jside
Simuliere den Tastendruck für DRUCK/S-Abf, dann ist es im clipboard, wie man es dann von diesem aus lädt oder abspeichert liegt am OS, ist aber ohne weiteres möglich,...

Re: Screenshot aus C-Programm

Verfasst: So Mai 17, 2009 6:47 pm
von +Fuss+
dani93 hat geschrieben:Mit SDL_SaveBMP kannst du den Inhalt eines Surfaces als BMP speichern.
Also z.B.

Code: Alles auswählen

SDL_SaveBMP (screen, "screen.bmp");
http://www.libsdl.org/cgi/docwiki.cgi/SDL_SaveBMP

EDIT:
Vergessen zu fragen: es ist doch kein reines Konsolenprogramm, oder?
Diese Möglichkeit macht doch nur Bilder von dem eigenen SDL-Fenster oder? Ich meinte eigentlich einen ganzen Screenshot, oder sehe ich da was falsch?

Wenn ich den Tastendruck unter Linux simulieren, dann öffnet sich doch immer diese Fenster für Speicherort etc. ich wollte eigentlich ein eigenständiges C-Programm, was selber aus sich heraus einen Screenshot aufnimmt. Oder ist das nicht möglich?


MfG Fuss

Re: Screenshot aus C-Programm

Verfasst: So Mai 17, 2009 7:05 pm
von Dirty Oerti
Das Tastendruck simulieren wäre die letzte Lösung.
Unter Linux ist es wohl kein Problem:

Code: Alles auswählen

import -window root screenshot.png
Im Programm imagemagick (glaube ich)

Re: Screenshot aus C-Programm

Verfasst: So Mai 17, 2009 7:09 pm
von nufan
+Fuss+ hat geschrieben:Diese Möglichkeit macht doch nur Bilder von dem eigenen SDL-Fenster oder?
Es speichert SDL-Surfaces als BMP. Das kann der ganze Fensterinhalt aber auch ein anderes Surface sein. Einen Screenshot vom kompletten Bildschirm wirst du damit aber nicht hinbekommen (es sei denn, du arbeitest mit SDL im Vollbildmodus).
+Fuss+ hat geschrieben:Wenn ich den Tastendruck unter Linux simulieren, dann öffnet sich doch immer diese Fenster für Speicherort etc. ich wollte eigentlich ein eigenständiges C-Programm, was selber aus sich heraus einen Screenshot aufnimmt. Oder ist das nicht möglich?
Ich hätte auch was in der Richtung vorgeschlagen:

Code: Alles auswählen

#include <stdio.h>

int main ()
{

  system ("gnome-screenshot");

  return 0;

}
Aber wie gesagt öffnet sich dann das Fenster. Das ist unter Windows vielleicht leichter, weil da nix passiert wenn du auf die Taste drückst.

Dirty Oerti hat geschrieben:Das Tastendruck simulieren wäre die letzte Lösung.
Unter Linux ist es wohl kein Problem:

Code: Alles auswählen

    import -window root screenshot.png

Im Programm imagemagick (glaube ich)
Wenn sich da kein Fenster öffnet sollte das doch mit system gehen. (auch wenn system böse ist...)

Re: Screenshot aus C-Programm

Verfasst: So Mai 17, 2009 7:27 pm
von Jside
dani93 hat geschrieben:
Dirty Oerti hat geschrieben:Das Tastendruck simulieren wäre die letzte Lösung.
Unter Linux ist es wohl kein Problem:

Code: Alles auswählen

    import -window root screenshot.png

Im Programm imagemagick (glaube ich)
Wenn sich da kein Fenster öffnet sollte das doch mit system gehen. (auch wenn system böse ist...)
Joop, reiner Consolen Befehl. Geht mit system(); Ewtl bei mehreren Screenshots vorher den Command via sprintf() und einem steigendem Integer im Namen vorformatieren...