 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 02.09.2010, 17:57 Titel: Zwischenablage -> Bild holen |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 02.09.2010, 18:40 Titel: |
|
|
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 |
|
 |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 02.09.2010, 18:52 Titel: |
|
|
Danke Euch.
Jetzt gehts erstmal daran den Code zu verstehen
Andere Frage:
Wieso ist dieser Code nicht unter freebasic-portal.de unter Code Beispiele?
Hat es allemal verdient dort zu sein. |
|
Nach oben |
|
 |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 04.09.2010, 12:05 Titel: |
|
|
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 |
|
 |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 04.09.2010, 19:57 Titel: |
|
|
@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 |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 04.09.2010, 20:18 Titel: |
|
|
Du hast aber schonmal von VNC gehört, oder? |
|
Nach oben |
|
 |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 04.09.2010, 20:26 Titel: |
|
|
jepp, was anderes ist es ja nicht, was ich da mache |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 04.09.2010, 21:02 Titel: |
|
|
Nur viel schlechter... |
|
Nach oben |
|
 |
|
|
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.
|
|