Autor Beitrag
cyberbug
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 53

WIN XP

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 11.10.08 03:04 
Mit BitBlt geht das zum Beispiel, da siehst du hier wie es (nach der Korrektur :D) 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 53

WIN XP

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 53

WIN XP

BeitragVerfasst: 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 :cry: :( :cry: ...

MFG cyberbug
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 11.10.08 14:27 
Du musst doch nur genau lesen, wozu die Parameter gut sind:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
BOOL BitBlt(
  HDC hdcDest, // Gerätekontext des Ziels (Canvas.Handle)
  int nXDest,  // x-Koordinate des Ziels (links)
  int nYDest,  // y-Koordinate des Ziels (oben)
  int nWidth,  // Breite des Ziels
  int nHeight, // Höhe des Ziels
  HDC hdcSrc,  // Gerätekontext der Quelle (Canvas.Handle)
  int nXSrc,   // x-Koordinate der Quelle (links)
  int nYSrc,   // y-Koordinate der Quelle (oben) 
  DWORD dwRop  // raster operation code //normalerweise SRCCOPY für exakte Kopie
);


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 user profile iconNarses: Quote- durch C#-Tags ersetzt
cyberbug Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 53

WIN XP

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 11.10.08 14:41 
Probiere es doch einfach aus, zeig doch was du versucht hast. Es ist auch nicht möglich es zu verstehen, wenn du es nicht versuchst. Und wenn du es versucht hättest, dann könntest du auch den entsprechenden Code einfach mal zeigen.

Auf konkrete Fragen gibts auch konkrete Antworten:
user profile iconcyberbug hat folgendes geschrieben Zum zitierten Posting springen:
Und wie benutze ich dann BitBlt mit TImage?
ausblenden Delphi-Quelltext
1:
BitBlt(Image2.Canvas.Handle, ...					
cyberbug Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 53

WIN XP

BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
BitBlt(Image2.Canvas.Handle, Image2.Left, Image2.Top, Image2.Width, Image2.Height, Image1.Canvas.Handle, 00, SRCCOPY );					


doch Image2 ist weiss(es soll aber der ausschnitt rein)...
Was habe ich falsch gemacht?

MFG cyberbug
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
BitBlt(Image2.Canvas.Handle, 00, Image2.Width, Image2.Height, Image1.Canvas.Handle, 00, SRCCOPY );					
cyberbug Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 53

WIN XP

BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 53

WIN XP

BeitragVerfasst: Sa 11.10.08 15:37 
Danke^^

MFG cyberbug
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 11.10.08 16:00 
Das hat aber mit der Ausgangsfrage herzlich wenig zu tun ;)