![]() |
Grenzen von PlgBlt
Liste der Anhänge anzeigen (Anzahl: 1)
Ich weiß nicht, ob die Frage nicht besser bei Multimedia/Grafik stehen sollte. Da es aber eine Windows-Funktion betrifft, stelle ich sie hier. Notfalls kann sie durch den Moderator verschoben werden:
Ich bin - nach wie vor - auf der Suche nach einer schnellen und einfachen Methode, um ein 1-Bit-Bitmap (schwarz/weiß) zu drehen. Dabei kommt man an PlgBlt nicht vorbei und wie das geht, weiß ich im Grunde. Ich habe aber das ![]() Ich habe mal meinen Quelltext angehängt. Das kleine Bitmap lässt sich drehen, das große nicht. Bei letzterem werden nur noch Höhe und Breite miteinander vertauscht. Ich habe schon alle möglichen Hinweise im Netz gelesen, bin aber nicht wirklich auf etwaige Einschränkungen gestoßen. Was macht ich verkehrt? Gruß und Dank, Alex |
Re: Grenzen von PlgBlt
Zitat:
EDIT: aber sehe gerade! Zitat:
|
Re: Grenzen von PlgBlt
Danke für die Antwort!
Zitat:
![]() ![]() Kann ich da jede beliebige nehmen? Zu FlipRotatePicture selbst habe ich leider noch nichts gefunden. Ich habe mir Deine(?) Demos mit der Uhr etc. angesehen. Das sieht sehr vielversprechend aus, auch wenn es nur kleine Bilder sind. Ich möchte etwas ab 3.000 x 4.000 aufwärts drehen... |
Re: Grenzen von PlgBlt
Zitat:
|
Re: Grenzen von PlgBlt
Habe mal mein Archiv angehängt.
Hoffe das ist erlaubt. Habe unter .. Using Images, Bitmaps, and Metafiles/Rotating, Reflecting, and Skewing Images Das Sample ein bißchen modifiziert und mit deinen großen Bitmap geladen. Es funktioniert. Das Archiv ist so gross weil dein Bitmap enthalten ist. hmm 1,8MB gruss Emil |
Re: Grenzen von PlgBlt
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Mein erstes Archiv ist auch nur 68 KB groß und da sind 2 große Dateien drin! :lol: Es liegt eher daran, dass nun die ganze GDI+ Implementierung für Delphi auf dem Server bei DelphiPraxis.net rumlungert. Du kannst ja mit EDIT das Archiv aus Deinem Beitrag wieder rausnehmen. Den Link zu GDI+ findet man in meinem ersten Post und Dein Beispiel habe ich jetzt als kleines Archiv mit meiner 1,8 MB Datei beigefügt. Es ist jetzt etwas größer. Denn ich habe die exe mit dringelassen, falls jemand experimentieren aber nicht GDI+ runterladen möchte. Werde mal sehen, wie weit ich damit komme... Gruß und Dank, Alex |
Re: Grenzen von PlgBlt
Beachte..
Du mußt ja nicht alles einbinden. Lade die DLL dynamisch und kopiere nur den teil in dein Projekt den du verwendest. Für eine Funktion über 1 MB an Daten hinzuzufügen ist etwas viel denk ich mal. In meinen Uhr Projekt ist ne *.pas wo du die initialisierung von GDI+ von verwenden kannst Du brauchst GdipImageRotateFlip, GdipCreateBitmapFromHBITMAP und die type natürlich das ist alles. gruss Emil |
Re: Grenzen von PlgBlt
Zitat:
Ich bin grad am Grübeln: Wie bekomme ich mein TBitmap in das TGPImage gezeichnet? :gruebel: Für die Demo ist das Vorgehen ja OK. Aber ich brauche es (später) zum Bearbeiten von Bildern, die frisch aus dem Scanner kommen. Ich verfüge nicht über das Wissen bzw. die Kapazitäten mein geliebtes TDelphiTwain umzuschreiben. Und von dort bekomme ich "nur" TBitmaps geliefert. Die gilt es zu bearbeiten. Ein Assign() habe ich leider nicht gefunden. Gruß, Alex |
Re: Grenzen von PlgBlt
GdipCreateBitmapFromHBITMAP oder umgekehrt GdipCreateHBITMAPFromBitmap
Kann dir nur anraten mein Beispiel anzuschauen da ist alles drin ;) gruss Emil |
Re: Grenzen von PlgBlt
Zitat:
![]() ![]() Ich vermute anhand der mir ausgegebenen Zeiten, dass ich erfolreich dem HBITMAP ein TBitmap zugewiesen und vermutlich auch gedreht habe. Den Code habe ich mir unter anderem ![]()
Delphi-Quellcode:
Leider kann ich mit dem Ergebnis nichts anfangen. Ich weiß nicht, wie ich es wieder auf das TImage bzw. TImage.Bitmap bekomme oder abspeichern kann. :wall:
Type
TForm1 = Class(TForm) Image1 : TImage; End; ... Procedure TForm1.Image1Click(Sender: TObject); Var FlipBild : TGPBitmap; Zeit : Int64; Begin Zeit:=GetTickCount; FlipBild:=TGPBitmap.Create(Image1.Picture.Bitmap.Canvas.Handle,Image1.Picture.Bitmap.Palette); Try FlipBild.RotateFlip(Rotate90FlipNone); Finally FlipBild.Free; End; Zeit:=GetTickCount-Zeit; Caption:=Application.Title+' ['+FormatFloat('#,##0',Zeit)+' ms]'; End; ... End. Das Beispiel mit der Uhr ist zwar genial; für mich aber zu kompliziert und mit 5 Units zu unübersichtlich. Ich habe genau 1 Mal die Funktion GdipCreateHBITMAPFromBitmap gefunden, konnte damit aber nichts anfangen. Die Syntax zeigt mir Delphi ja automatisch an. Aber ohne das Wissen über die Variablen und was die bewirken/speichern können, komme ich nicht weiter. Dazu müsste ich dann wieder was lesen und ... Gute Nacht, Alex |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz