Autor |
Beitrag |
cyberbug
      
Beiträge: 53
WIN XP
|
Verfasst: Sa 11.10.08 02:31
Hi,
ich habe folgendes Problem:
Um nicht soviele Dateien zu haben, habe ich mir überlegt, mehrere Grafiken in eine zu machen(bzw. die Grafiken "aneinanderreiehn"). Wie kann ich jetzt aber gezielt auch nur die Grafik auslesen(den Teil der grafik), die ich brauche(quasi irgendwie temporär "ausschneiden")? Ich hoffe mein Problem ist klargeworden...
MFG cyberbug
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 11.10.08 03:04
Mit BitBlt geht das zum Beispiel, da siehst du hier wie es (nach der Korrektur  ) geht:
www.delphipraxis.net/post790405.html
Wenn du einfach nur Grafiken mit deinem Programm mitliefern willst, dann wären Ressourcen eine gute Alternative, da dann gar keine Datei mehr neben der Exe gebraucht wird:
www.delphi-library.de/viewtopic.php?p=258
|
|
cyberbug 
      
Beiträge: 53
WIN XP
|
Verfasst: Sa 11.10.08 03:23
Danke für die Antwort!
Könntest du mir erstere Lösung bitte durch Code verdeutlichen(ich verstehe das noch nicht so ganz...)?
MFG cyberbug
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 11.10.08 03:31
delphi.about.com/lib...c/text/uc052102f.htm
msdn.microsoft.com/e...ms532278(VS.85).aspx
Im Grunde gibst du das Handle, die Position des Zielrechtecks und dessen Größe an (bezogen auf das Zielbild), danach das Handle der Quelle sowie die Position des Quellrechtecks (bezogen auf das Quellbild).
Der letzte Parameter gibt an was bei der Operation passieren soll, bei dir sollte das SRCCOPY sein, eine Liste siehst du ja unter dem zweiten Link in der Referenz.
|
|
cyberbug 
      
Beiträge: 53
WIN XP
|
Verfasst: Sa 11.10.08 14:19
Danke, aber ich steh grad irgendwie auf dem Schlauch´...
Könntest du mir bitte die Funktion mit den richtigen Parametern geben, wenn ich jetzt angenommen eine datei test.jpg habe, in der zwei nebeneinanderliegende images sind(1. 32x32 2. 32x32(rechts davon)), und wenn ich zwei komponenten, Image1 und Image2 vom typ TImage habe, dass dann bild 1 in Image1 geladen wird und Bild 2 in image2?
Ich stehe wie gesagt auf dem Schlauch  ...
MFG cyberbug
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 11.10.08 14:27
Du musst doch nur genau lesen, wozu die Parameter gut sind:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| BOOL BitBlt( HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop ); |
Du gibst Breite und Höhe des Zielkontext an sowie den oberen linken Zielpunkt. Dann wird ein entsprechend großer Ausschnitt ab dem angegebenen linken oberen Punkt der Quelle ins Ziel kopiert.
Moderiert von Narses: Quote- durch C#-Tags ersetzt
|
|
cyberbug 
      
Beiträge: 53
WIN XP
|
Verfasst: Sa 11.10.08 14:36
Danke für deine Bemühung, aber ich verstehe es echt nicht... Und wie benutze ich dann BitBlt mit TImage?
Könnte mir das bitte einmal jemand(anhand von sehr wenig code) verdeutlichen? Daraus würde ich dass dan wahrscheinlich verstehen...
MFG cyberbug
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 11.10.08 14:41
|
|
cyberbug 
      
Beiträge: 53
WIN XP
|
Verfasst: Sa 11.10.08 14:56
Nun gut, danke für die Antwort. Ich habe es jetzt zumindestens ein bisschen verstanden.
ich habe folgendes geschrieben:
Delphi-Quelltext 1:
| BitBlt(Image2.Canvas.Handle, Image2.Left, Image2.Top, Image2.Width, Image2.Height, Image1.Canvas.Handle, 0, 0, SRCCOPY ); |
doch Image2 ist weiss(es soll aber der ausschnitt rein)...
Was habe ich falsch gemacht?
MFG cyberbug
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 11.10.08 15:03
Die Koordinaten gelten relativ zum Bitmap. So hast Du den Bereich gerade außerhalb des Bitmaps kopiert. Versuch es mal so:
Delphi-Quelltext 1:
| BitBlt(Image2.Canvas.Handle, 0, 0, Image2.Width, Image2.Height, Image1.Canvas.Handle, 0, 0, SRCCOPY ); |
|
|
cyberbug 
      
Beiträge: 53
WIN XP
|
Verfasst: Sa 11.10.08 15:12
Stimmt, so funktioniert es! Danke für eure Hilfe!
MFG cyberbug
PS: Das funktioniert aber doch nur mit bitmaps oder? Gibts das auch für jpg oder png?
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 11.10.08 15:19
Bei einem JPEG kommst Du nicht an den Device-Kontext heran (es gibt dort keinen Canvas). Also musst Du den Umweg über Konvertierung in eine Bitmap gehen. Wie das bei PNG aussieht, weiß ich im Moment auch nicht aus dem Kopf.
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 11.10.08 15:30
Lade dir GraphicEx herunter, füge den Pfad zu den Dateien in den Bibliothekspfad ein und binde die Unit GraphicEx dann in deine uses ein. Dann versteht TPicture und damit TImage diese und andere Formate.
|
|
cyberbug 
      
Beiträge: 53
WIN XP
|
Verfasst: Sa 11.10.08 15:37
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 11.10.08 16:00
Das hat aber mit der Ausgangsfrage herzlich wenig zu tun 
|
|