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:

Zwischenablage -> Bild holen

 
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
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 02.09.2010, 17:57    Titel: Zwischenablage -> Bild holen Antworten mit Zitat

Hallo zusammen,
wie ich den kompletten Bildschirm in die Zwischenablage bekomme, weiss ich jetzt.
Jedoch müsste ich noch wissen, wie ich das Bild aus der Zwischenablage "zwecks Umwandlung in das png Format" bekomme.

Wüsste jemand wie das geht?

Zudem würde ich gerne wissen, ob es eine fertige Funktion gibt, um bmp Bilder in das png Format zu bekommen.

Cu Andy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 02.09.2010, 18:35    Titel: Antworten mit Zitat

Eine eingebaute PNG-Unterstützung gibt es in FreeBASIC nicht, aber vielleicht ist hier was für dich dabei:

http://www.freebasic-portal.de/tutorials/png-bilder-anzeigen-speichern-27.html
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 02.09.2010, 18:40    Titel: Antworten mit Zitat

Hi,
Code:
'mit fbc -s gui kompiliert wird kein Konsolefenster erzeugt
#Include Once "windows.bi"
#Include Once "win/GdiPlus.bi"
Using gdiplus 'NAMESPACE

Function GetEncoderClsid( sFormat As String, ByRef temp_clsid As CLSID ) As Integer
 Dim As ImageCodecInfo Ptr pImageCodecInfo
 Dim As UInteger numEncoders, size

 GdipGetImageEncodersSize( @numEncoders, @size )
 pImageCodecInfo = Callocate( size )
 If GdipGetImageEncoders( numEncoders, size, pImageCodecInfo )=0 Then

  For i As Integer = 0 To numEncoders - 1
   If *Cast(WString Ptr,pImageCodecInfo[i].FormatDescription) = sFormat Then
    temp_clsid = pImageCodecInfo[i].clsid
    Function = 1
   End If
  Next
 EndIf
 If pImageCodecInfo <> 0 Then DeAllocate( pImageCodecInfo )
End Function


Function Desktopimage(w As Integer, h As Integer) As GpBitmap Ptr
 Dim As HWND hWnd
 Dim As HDC hDDC, hCDC
 Dim As HBITMAP hBMP
 Dim As GpBitmap Ptr image

 hWnd = GetDesktopWindow()
 hDDC = GetDC(hWnd)
 hCDC = CreateCompatibleDC(hDDC)
 hBMP = CreateCompatibleBitmap(hDDC, w, h)
 SelectObject(hCDC, hBMP)
 BitBlt(hCDC, 0, 0, w, h, hDDC, 0, 0, SRCCOPY)

 GdipCreateBitmapFromHBITMAP(hBMP, NULL, @image)
 Function = image
 ReleaseDC(hWnd, hDDC)
 DeleteDC(hCDC)
 DeleteObject(hBMP)'darf man das hier schon deleten?
End Function

Sub save_Image(image As Any Ptr, FName As String, dformat As String)
 Dim m_clsid As CLSID
 Dim As WString *20 fn1 = FName+"."+dformat

 If GetEncoderClsid ( dformat, m_clsid ) = 0 Then
  MessageBox( 0, "Unbekanntes Dateiformat!",_
  "Fehler:", MB_OK Or MB_ICONERROR )
 Else
  If GdipSaveImageToFile( image, fn1, @m_clsid , NULL ) <> 0 Then
   MessageBox( 0, "Datei "+fn1+" konnte nicht gespeichert werden!",_
   "Fehler:", MB_OK Or MB_ICONERROR )
  Else
   MessageBox( 0, fn1+" als "+fn1+" gespeichert!",_
   "GDI+ hat", MB_OK Or MB_ICONINFORMATION )
  EndIf
 EndIf
 GdipDisposeImage(image)
End Sub

Dim As GdiplusStartupInput gdipsi
Dim As ULONG_PTR gdipToken
gdipsi.GdiplusVersion = 1 'GdiplusVersion auf 1 setzen
GdiplusStartup( @gdipToken, @gdipsi, NULL )'Initialisieren
Dim As GpBitmap Ptr image

Dim As Integer w, h
ScreenInfo (w, h) 'Desktopformat, wenn vorher kein Screen angelegt wurde
image = Desktopimage(w, h)
' als png speichern
save_Image(image ,"Test2", "PNG")'BMP, PNG , JPEG , GIF , TIFF

GdiplusShutdown(gdipToken)
So gehts auch!

EDIT/ Quälcode etwas geändert!
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.


Zuletzt bearbeitet von volta am 02.09.2010, 22:48, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 02.09.2010, 18:52    Titel: Antworten mit Zitat

Danke Euch.

Jetzt gehts erstmal daran den Code zu verstehen zwinkern

Andere Frage:
Wieso ist dieser Code nicht unter freebasic-portal.de unter Code Beispiele?
Hat es allemal verdient dort zu sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 04.09.2010, 12:05    Titel: Antworten mit Zitat

Zitat:

wie ich den kompletten Bildschirm in die Zwischenablage bekomme, weiss ich jetzt.


Hmm...., so etwas suche ich, wie man ein Bild in Zwischenablage legt mit Freebasic.

Kannst du das mal zeigen?

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 04.09.2010, 19:57    Titel: Antworten mit Zitat

@funkeld ->

declare function keybd_event Lib "user32" alias "keybd_event" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)as long
Const KEYEVENTF_KEYUP = &H2
Const VK_SNAPSHOT = &H2C
Const VK_MENU = &H12

keybd_event VK_SNAPSHOT, 0, 0, 0
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
End

Hier werden einfach Tastendrücke simuliert.
Bekanntlich bekommt man mit ALT + DRUCK = ein Bild in die Zwischenablage

Edit: Achso, weshalb ich wissen wollte, wie man an das aktuelle Screen kommt und dann abspeichert hat folgenden Sinn.

Die Mauspositionen, als auch die Grafik übermittele ich einen Server.
Dieser Server kann darauf reagieren "er schickt Tastatur u. Mausbefehle".
Demzufolge kann man jeden Clienten fernadminstrieren.

Einziges Manko beim Konzept:
Der Screen aller Clienten müssen kleiner sein, als der Screen des Servers.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 04.09.2010, 20:18    Titel: Antworten mit Zitat

Du hast aber schonmal von VNC gehört, oder?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 04.09.2010, 20:26    Titel: Antworten mit Zitat

jepp, was anderes ist es ja nicht, was ich da mache
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 04.09.2010, 21:02    Titel: Antworten mit Zitat

Nur viel schlechter...
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
Seite 1 von 1

 
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