Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Screenshot vom Programmfenster
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 05.07.2007, 17:30    Titel: Antworten mit Zitat

Noch eine kleine Hilfe:
Code:

    Dib = FreeImage_ConvertTo32Bits(Dib)
   
    SprWidth = FreeImage_GetWidth(Dib)
    SprHeight = FreeImage_GetHeight(Dib)
    Sprite = ImageCreate(SprWidth, SprHeight)
    Bits = FreeImage_GetBits(Dib)
   
       
   
    MemCpy CPtr(Zstring Ptr, Sprite) + 4, Bits, SprWidth * SprHeight * 4


Erstellt aus dem FreeImage Bildpuffer "Dib" einen FB-Bildpuffer.
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 05.07.2007, 17:57    Titel: Antworten mit Zitat

Bingo!
Da hätte jeder drauf kommen können Hammer
Code:

w=640
h=480
screenres w,h

' Den Bildschirm mit irgendwas füllen
FOR X=1 to w
    For Y= 1 to h
        Farbe=INT(RND * 255)+1
        Pset(X,Y),Farbe
    NEXT
NEXT


' Den Bildschirm auslesen (Thx an Beispiel..)
Dim ScreenShot As Any Ptr
ScreenShot = ImageCreate(w, h)
Get (0, 0)-(w-1, h-1), ScreenShot ' hätt ich beinahe Falschgemacht xD..
Bsave "TmpBitmap.bmp",ScreenShot ' Temopäre Bitmap für Freeimage
' Und FreeImgage kommt jetzt ins Spiel:
#include "freeimage.bi"
ScreenShotX = FreeImage_Save(FIF_JPEG,FreeImage_Load(FIF_BMP,"TmpBitmap.bmp" ),HEX$(TIMER)+".jpg") ' HEX$(TIMER) ist der Dateiname.

'Und Fertig ;)

Yahooo!!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 05.07.2007, 18:00    Titel: Antworten mit Zitat

Dauert nur ein bissl.

Eine ähnliche Idee verfolgte ich bei JView zuerst auch happy

Aber ein "echter" Konvertierungsalgo ist da immer noch um meilen schneller
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 05.07.2007, 21:17    Titel: Antworten mit Zitat

Dauer ein Bissel bis das Bild generiert ist...
Aber sonst eigl. nicht..


Zuletzt bearbeitet von AndT am 05.07.2007, 21:50, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 05.07.2007, 21:22    Titel: Antworten mit Zitat

...

Zuletzt bearbeitet von AndT am 05.07.2007, 21:50, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 05.07.2007, 21:29    Titel: Antworten mit Zitat

Ich hab den Code in eine Sub zusammengefasst:
Code:
SUB MakeScreenshot (Dateiname as String , w as integer , h as integer)
#include "freeimage.bi"
    Dim ScreenShot As Any Ptr
ScreenShot = ImageCreate(w, h)
Get (0, 0)-(w-1, h-1), ScreenShot
Bsave "TmpBitmap.bmp",ScreenShot
ScreenShotX = FreeImage_Save(FIF_JPEG,FreeImage_Load(FIF_BMP,"TmpBitmap.bmp" ),Dateiname + ".jpg") ' HEX$(TIMER) ist der Dateiname.
kill "tmpbitmap.bmp"
ImageDestroy ScreenShot
End Sub


Beispiel:

Code:
' Beispielprogramm
screen 18
print "dat isn Testscreenshot.."
mkdir "screenshots"
chdir "screenshots"
MakeScreenshot ("test.jpg",640,480)
chdir ".."


///
Code überarbeitet für 0.18 zwinkern :

Code:
#include once "freeimage.bi"
public SUB  MakeScreenshot (Dateiname as String , w as integer , h as integer)
Dim ScreenShot As Any Ptr
Dim ScreenShotX as integer
ScreenShot = ImageCreate(w, h)
Get (0, 0)-(w-1, h-1), ScreenShot
Bsave "TmpBitmap.bmp",ScreenShot
ScreenShotX = FreeImage_Save(FIF_JPEG,FreeImage_Load(FIF_BMP,"TmpBitmap.bmp" ),Dateiname + ".jpg") ' HEX$(TIMER) ist der Dateiname.
kill "tmpbitmap.bmp"
IMAGEDESTROY ScreenShot
End Sub

' Beispielprogramm
screen 18
print "dat isn Testscreenshot.."
mkdir "screenshots"
chdir "screenshots"
MakeScreenshot ("test.jpg",640,480)
chdir ".."


Zuletzt bearbeitet von AndT am 06.07.2007, 09:48, insgesamt 5-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
masterherpo



Anmeldungsdatum: 22.01.2006
Beiträge: 102

BeitragVerfasst am: 05.07.2007, 22:16    Titel: Antworten mit Zitat

grinsen lächeln

Vielen Dank. Das ist ein schöner Code, das ist genau was ich brauche lächeln
Aber wieso warst du so motiviert dieses Problem zu lösen? Das kann ich nicht ganz nachvollziehen zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 05.07.2007, 22:18    Titel: Antworten mit Zitat

Ich bin gerade dabei mein Prog einwenig aufzuarbeiten zwinkern
Es Brucht eine Speicher und Lade funktion und warum nicht den Export der Bilder in den verschiedensten Formaten grinsen
Siehe dazu:
http://forum.qbasic.at/viewtopic.php?t=4394
Der 0.18 Code ist nochmals verbessert aber ich bezweifele, das er in 0.15 funzt.

Mal ne kleine Beschreibung, wie ich Darauf gekommen bin..
Zuerst habe ich versucht den Buffer als Rohdatei (RAW) auszulesen..
Das klappte aber nicht, schon alleine weil ich nicht Wusste, das Get ein eigenes Kompressionsformat benutzt. Erst Bsave Speichert es in ein von FreeImage lesbares Bitmap Format (BMP). Diese erstellte Datei wird wieder mit Freeimage eingelesen, um eine höchst mögliche Kompatibelität zu erzielen. (Vermeidung eines Absturzes)
Erst dann kann mit FreeImage in ein belibiges Format gespeichert werden.
Wer weitere Infos über FreeImage braucht, kann sich ja mal das Beispiel
Code:
\examples\gfx\freeimage.bas
angucken zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz