Autor Beitrag
Hazer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

Win XP Pro SP2
Turbo Delphi 2006
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

Win XP Pro SP2
Turbo Delphi 2006
BeitragVerfasst: Mo 08.01.07 07:55 
Danke für die Antwort, doch habe ich Probleme mit dieser Funktion.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
BOOL BitBlt(
  HDC hdcDest, // handle to destination DC
  int nXDest,  // x-coord of destination upper-left corner
  int nYDest,  // y-coord of destination upper-left corner
  int nWidth,  // width of destination rectangle
  int nHeight, // height of destination rectangle
  HDC hdcSrc,  // handle to source DC
  int nXSrc,   // x-coordinate of source upper-left corner
  int nYSrc,   // y-coordinate of source upper-left corner
  DWORD dwRop  // raster operation code
);

Was soll hdc sein?
Habe es so probiert:
ausblenden 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 user profile iconChristian S.: Quote- durch C#-Tags ersetzt
Moderiert von user profile iconChristian 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 403
Erhaltene Danke: 1

Winows 7
Delphi XE
BeitragVerfasst: Mo 08.01.07 09:18 
Du brauchst das Handle deines Images (z.B. Image1.Canvas.Handle). Damit sollte es dann funktionieren.
Hazer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

Win XP Pro SP2
Turbo Delphi 2006
BeitragVerfasst: Mo 08.01.07 21:52 
Ah, danke :)
Jetzt habe ich nur ein einziges Problem :(

Mein Code lautet:
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 08.01.07 22:11 
Der letzte Parameter lautet "BLACKNESS". Das gibt Dir einen kleinen Hinweis :zwinker: Da können noch andere Sachen rein :D

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Hazer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

Win XP Pro SP2
Turbo Delphi 2006
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 08.01.07 23:42 
Den Parameter kannte ich gar nicht, dabei steht der als erstes in der Referenz :lol:
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.)


user profile iconHazer hat folgendes geschrieben:
Mein Code lautet:
ausblenden 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 :gruebel:
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 08.01.07 23:53 
user profile iconChristian 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

Win XP Pro SP2
Turbo Delphi 2006
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 09.01.07 09:08 
So müsste es richtig sein:
ausblenden 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... ;-)