Screenshot aus C-Programm

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Screenshot aus C-Programm

Beitrag von +Fuss+ » So Mai 17, 2009 6:17 pm

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

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Screenshot aus C-Programm

Beitrag von Dirty Oerti » So Mai 17, 2009 6:25 pm

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...
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Screenshot aus C-Programm

Beitrag von nufan » So Mai 17, 2009 6:30 pm

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?

Benutzeravatar
Jside
Beiträge: 377
Registriert: Di Nov 11, 2008 12:56 am

Re: Screenshot aus C-Programm

Beitrag von Jside » So Mai 17, 2009 6:37 pm

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,...

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: Screenshot aus C-Programm

Beitrag von +Fuss+ » So Mai 17, 2009 6:47 pm

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

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Screenshot aus C-Programm

Beitrag von Dirty Oerti » So Mai 17, 2009 7:05 pm

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)
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Screenshot aus C-Programm

Beitrag von nufan » So Mai 17, 2009 7:09 pm

+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...)

Benutzeravatar
Jside
Beiträge: 377
Registriert: Di Nov 11, 2008 12:56 am

Re: Screenshot aus C-Programm

Beitrag von Jside » So Mai 17, 2009 7:27 pm

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...

Antworten