Hi, tut mir leid, wenn ich hier schon wieder frage, aber finde nichts im Internet und habe schon viel ausprobiert..
Und zwar habe ich folgende Prozedur, mit der ich wunderbar Screenshots machen kann.
Jetzt will ich mit ihr aber nicht den gescreenshotteten Desktop schneiden, sondern ein HBitmap, welches ich übergebe.
Sieht so aus :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| property Bitmap: HBITMAP read FBitmap;
procedure TScreenshot.CutH(Links, Rechts, Oben, Unten : Integer; SourceBitmap : HBitmap); const CAPTUREBLT = $40000000; var Width, Height: Integer; SourceDC, TargetDC, MyHDC: HDC; DesktopWindow: HWND;
Width := Rechts - Links; Height := Unten - Oben; DesktopWindow := GetDesktopWindow; SourceDC := GetDC(DesktopWindow); TargetDC := CreateCompatibleDC(SourceDC); FBitmap := CreateCompatibleBitmap(SourceDC, Width, Height); SelectObject(TargetDC, FBitmap); BitBlt(TargetDC, 0, 0, rechts, unten, SourceDC, links, oben, SRCCOPY or CAPTUREBLT); ReleaseDC(SourceBitmap, SourceDC); DeleteDC(TargetDC); |
Also ist mein Problem praktisch das SourceDC, welches hier den Desktop-Screenshot annimmt.
Das müsste ich mit einem HBitmap schaffen, aber kriege ich nicht hin...
Danke,
Lg
---
Moderiert von
Narses: Beiträge zusammengefasst---
Also vielleicht hab ich das ein bisschen doof beschrieben
Bis jetzt hatte ich immer zuerst einen Screenshot vom Bildschirm gemacht, den auf ein Quadrat geschnitten.
Danach habe ich den nochmal geschnitten, so dass ich genau das Bild hatte was ich wollte.
Ich weiß, ich hätte das schlauer machen können, mit zb nur einmal Schneiden
Naja, jetzt hab ich halt genau die Zahlen, die das sein müssten...
Also dachte ich mir ich hab 2 Möglichkeiten das jetzt zu realisieren (nur mit Bitmap Handles) :
1. Es gibt irgendwelche mathematischen Formeln um soetwas auszurechnen, das würde mich dann dazu führen, dass ich nur einmal schneiden müsste. Wäre Perfekt. Nur kann ich garkein Mathe
2. Ich kriege das so irgendwie hin... In meiner Funktion die ich bis jetzt habe kriege ich den ersten Schritt problemlos hin (der wo zuerst ein Quadrat geschnitten wird). Doch das zweite mal Schneiden geht nicht, oder nicht so wie ich will.
Entweder schneidet er zwar die richtige Größe, aber falsche Stelle. Habe mir schon ein paar Dokumentationen durchgelesen, aber ich verstehe trotzdem nicht was hinter Funktionen wie SelectObject steckt und wie die arbeiten.
Vielleicht kann mir ja jemand auf die Sprünge helfen..
Ich poste mal was ich bis jetzt so probiert habe, vielleicht sieht ja dann jemand wo dras Problem ist
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| FBitmap := SelectObject(TargetDC, ZBitmap); FBitmap := CreateCompatibleBitmap(TargetDC, Width2, Height2); BitBlt(FBitmap, 0, 0, rechts, unten, TargetDC, links, oben, SRCCOPY); |
Lg
Moderiert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Sa 12.03.2011 um 23:41