![]() |
gdi+ 2 TGPBitmap zu einer zusammenfügen
Hallo
Weiss jemand eine Möglichkeit wie man zwei TGPBitmap zu einer zusammenfügen kann. Kann auch ein TGPImage sein. |
AW: gdi+ 2 TGPBitmap zu einer zusammenfügen
Zitat:
Schau im Source von GDIClock da wird das Dokumentiert. Wenn du damit überlagern meinst! gruss |
AW: gdi+ 2 TGPBitmap zu einer zusammenfügen
Danke habe ich mir mal angeschaut
Interessant, nur ich brauche was um so was wie Bitmap1.height + Bitmap2.height beide haben die gleiche Breite und das gibt eine neue Bitmap3. |
AW: gdi+ 2 TGPBitmap zu einer zusammenfügen
Höhe aus Höhensumme berechnen und dann die beiden Quellbitmaps draufmalen, was ist das Problem?
|
AW: gdi+ 2 TGPBitmap zu einer zusammenfügen
Delphi-Quellcode:
Habe da mal was zusammengebastelt, aber es geht
var
B1 , B2, B3 : TBitmap; i,x,y : integer; begin B1 := TBitmap.Create; B2 := TBitmap.Create; B3 := TBitmap.Create; B1.LoadFromFile('d:\test1.bmp'); B2.LoadFromFile('d:\testX.bmp'); B3.Height := B1.Height + B2.Height; B3.Width := B1.Width; for x := 0 to B3.Width -1 do for y := 0 to B3.Height -1 do begin if y <= B1.Height then B3.Canvas.Pixels [x , y ] := B1.Canvas.Pixels [x , y ] else B3.Canvas.Pixels [x , y ] := B2.Canvas.Pixels [x , y - B1.Height -1 ]; end; B3.SaveToFile('d:\testQ.bmp'); Image2.Picture.Bitmap.Assign(B3); B1.Free; B2.Free; B3.Free; end; auf die Idee hat mich die Seite ![]() gebracht. Mal sehen ob ich das noch schneller mit streams bekomme |
AW: gdi+ 2 TGPBitmap zu einer zusammenfügen
Wieso nicht einfach mit
![]() |
AW: gdi+ 2 TGPBitmap zu einer zusammenfügen
Delphi-Quellcode:
und so geht es echt schnell.
function AddBitmapInHeight(B1, B2 : TBitmap) : TBitmap;
type TBitmapHeader = packed Record bitCH1 : AnsiChar; bitCH2 : AnsiChar; bitSize : cardinal; bitUnUsed1 : word; bitUnUsed2 : word; bitOffset : Cardinal; bitInfoHeader : Cardinal; bitwidth : integer; bitheight : integer; bitplanes : word; bitNuOfPix : word; bitCompression : Cardinal; bitSizeImage : Cardinal; bitXPixMeter : integer; bitYPixMeter : integer; bitColorsUsed : Cardinal; bitImportantColors : Cardinal; end; PBitmapHeader = ^TBitmapHeader; var ms1 , ms2 : TMemoryStream; Buffer1, Buffer2 : pointer; BInfo : TBITMAPINFO; PBH : PBitmapHeader; begin try ms1 := TMemoryStream.Create; try ms2 := TMemoryStream.Create; B1.SaveToStream(ms1); // Bitmap 1 in den Stream 1 B2.SaveToStream(ms2); // Bitmap 2 in den Stream 2 try GetMem(Buffer1 , ms1.Size + 1); FillChar(Buffer1^ , SizeOf(Buffer1) , #0); PBH := Buffer1; // Bitmap Header auf den Buffer der ersten Bitmap try GetMem(Buffer2 , ms2.Size + 1); FillChar(Buffer2^ , SizeOf(Buffer2) , #0); ms1.Position := 0; // Auf den Anfan des Stream - Wichtig ! ms1.ReadBuffer(Buffer1^ , ms1.Size); //Stream1 in den Buffer 1 schreiben PBH^.bitSize := ms1.Size + ms2.Size - 54; // Neue Header Info Grösse in den Buffer 1 schreiben PBH^.bitheight := B1.Height + B2.Height; // das gleiche mit der Höhe ms2.Position := 54; // Position ohne den Heder von Bitmap 2 ms2.ReadBuffer(Buffer2^ , ms2.Size -54);// und inden den Buffer 2 ms1.Position := 0; ms1.WriteBuffer(Buffer1^, ms1.Size); ms1.SetSize(ms1.Size + ms2.Size); // Neue grösse der Bitmap in den Stream setzen ms1.WriteBuffer(Buffer2^, ms2.Size); ms1.Position := 0; Result := TBitmap.Create; Result.LoadFromStream(ms1); finally FreeMem(Buffer2); end; finally FreeMem(Buffer1); end; finally ms2.Free; end; finally ms1.Free; end; end; DaddyH warum nicht mit draw gute frage. ich hatte es so im kopf durch das clock beispiel und ich wusste da kommt noch was mit streams |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 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