| Autor |
Beitrag |
Hazer
      
Beiträge: 54
Win XP Pro SP2
Turbo Delphi 2006
|
Verfasst: Do 04.01.07 18:18
Hallo,
ich habe ine Frage: Kann man, wenn ich zum Beispiel ein Bild in ein Canvas einlese, nur ein Teil davon ausschneiden und speichern?
Ist das irgendwie machbar?
_________________ I was too weak to fight | once more i let go
it is a black session | an invitation of sorts
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 04.01.07 18:22
Du solltest mittels BitBlt (siehe Hilfe) einen Teil Deiner Canvas in ein zuvor erstelltes Bitmap kopieren können und das dann speichern. Vorher noch die Größe des Bitmaps entsprechend setzen.
(Hab's nicht getestet, aber als Ansatz sollte das gehen)
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Hazer 
      
Beiträge: 54
Win XP Pro SP2
Turbo Delphi 2006
|
Verfasst: Mo 08.01.07 07:55
Danke für die Antwort, doch habe ich Probleme mit dieser Funktion.
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 ); |
Was soll hdc sein?
Habe es so probiert:
Delphi-Quelltext 1:
| bitblt(image1.picture,10,10,image1.Width,image1.Height,image2.Picture,0,0,[ ]); |
Aber leider, wie erwartet, funktioniert das nicht (verschiedene Typen 'HDC' und 'TPicture')
Auch habe ich image1.canvas probiert, geht aber auch nicht
Moderiert von Christian S.: Quote- durch C#-Tags ersetzt
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt
_________________ I was too weak to fight | once more i let go
it is a black session | an invitation of sorts
|
|
freedy
      
Beiträge: 403
Erhaltene Danke: 1
Winows 7
Delphi XE
|
Verfasst: Mo 08.01.07 09:18
Du brauchst das Handle deines Images (z.B. Image1.Canvas.Handle). Damit sollte es dann funktionieren.
|
|
Hazer 
      
Beiträge: 54
Win XP Pro SP2
Turbo Delphi 2006
|
Verfasst: Mo 08.01.07 21:52
Ah, danke
Jetzt habe ich nur ein einziges Problem
Mein Code lautet:
Delphi-Quelltext 1: 2: 3: 4: 5:
| jpeg:=tjpegimage.Create; bmp:=tbitmap.Create; jpeg.loadfromfile(opendialog1.FileName); bmp.Assign(jpeg); bitblt(bmp.Handle,12,12,image1.Width,image1.Height,image1.canvas.Handle,0,0,BLACKNESS); |
Doch angezeigt wird mir nichts 
_________________ I was too weak to fight | once more i let go
it is a black session | an invitation of sorts
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 08.01.07 22:11
Der letzte Parameter lautet "BLACKNESS". Das gibt Dir einen kleinen Hinweis  Da können noch andere Sachen rein 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Hazer 
      
Beiträge: 54
Win XP Pro SP2
Turbo Delphi 2006
|
Verfasst: Mo 08.01.07 23:29
Klar, habe es zuvor mit "SRCCOPY" und mit "MERGECOPY" probiert (ja sogar mit WHITENESS  ) Aber all das bringt das selbe Resultat => nichts 
_________________ I was too weak to fight | once more i let go
it is a black session | an invitation of sorts
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 08.01.07 23:42
Den Parameter kannte ich gar nicht, dabei steht der als erstes in der Referenz
| PSDK hat folgendes geschrieben: | BLACKNESS
Fills the destination rectangle using the color associated with index 0 in the physical palette. (This color is black for the default physical palette.) |
Hazer hat folgendes geschrieben: | Mein Code lautet:
Delphi-Quelltext 1: 2: 3: 4: 5:
| jpeg:=tjpegimage.Create; bmp:=tbitmap.Create; jpeg.loadfromfile(opendialog1.FileName); bmp.Assign(jpeg); bitblt(bmp.Handle,12,12,image1.Width,image1.Height,image1.canvas.Handle,0,0,BLACKNESS); |
Doch angezeigt wird mir nichts  |
Dann müsste da doch ein schwarzes Rechteck zu sehen sein, wenn die Koordinaten stimmen
Was du mit deinem Code machst ist ja folgendes: Du nimmst das, was in Image1 drin ist und zeichnest es in bmp, nur um 12 Pixel nach rechts und unten verschoben. Ist aber der Inhalt von bmp groß genug? Weil sonst hängt das nach rechts und unten raus und wenn bmp z.B. nur 12 Pixel breit ist, dann fängt das schwarze Rechteck, das im Moment gezeichnet wird, außerhalb vom bmp überhaupt an.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 08.01.07 23:48
Oh, mir fällt gerade auf, dass Du das Quell- und das Ziel-Handle vertauscht hast. Dann noch SRCCOPY verwenden und es sollte gehen.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 08.01.07 23:53
Christian S. hat folgendes geschrieben: | | Oh, mir fällt gerade auf, dass Du das Quell- und das Ziel-Handle vertauscht hast. Dann noch SRCCOPY verwenden und es sollte gehen. |
Das habe ich aus dem bisher geposteten nicht erkennen können... Mir sah es auch komisch aus, aber was eigentlich von wo nach wo soll, habe ich nicht erkennen können. Deshalb habe ich nur gesagt, was der Code eigentlich macht... 
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 08.01.07 23:58
Naja, da er das JPEG, welches er aus einer Datei lädt, dem Bitmap zuweist, bin ich davon ausgegangen, dass das die Quelle sein soll.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Hazer 
      
Beiträge: 54
Win XP Pro SP2
Turbo Delphi 2006
|
Verfasst: Di 09.01.07 08:23
Christian S. liegt richtig, ich habe es vertauscht :redface:
Hmm... ich probiere nun schon sehr lange rum, aber ich habe ein Problem. Wenn ich ein Bild lade und das kopieren will, funktioniert alles nicht. Aber wenn ich ein paar Striche auf ein Canvas zeichne und dann den selben Code benutze, funktioniert alles.
Hilfe, ich bin des Aufgebens nahe 
_________________ I was too weak to fight | once more i let go
it is a black session | an invitation of sorts
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 09.01.07 09:08
So müsste es richtig sein:
Delphi-Quelltext 1:
| bitblt(image1.canvas.Handle,12,12,image1.Width,image1.Height,bmp.Canvas.Handle,0,0,SRCCOPY); |
Wie bist du bei der Bitmap darauf gekommen statt dem Handle der Zeichenfläche Canvas der Bitmap ein Handle der Bitmap, also ein HBitmap, zu nehmen? Nein, die Frage ist nicht wirklich ernst gemeint... 
|
|
|