Einzelnen Beitrag anzeigen

Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#7

AW: gdi+ 2 TGPBitmap zu einer zusammenfügen

  Alt 16. Feb 2012, 13:56
Delphi-Quellcode:
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;
und so geht es echt schnell.

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
Martin MIchael

Geändert von ATS3788 (16. Feb 2012 um 13:57 Uhr) Grund: falscher Name
  Mit Zitat antworten Zitat