AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia gdi+ 2 TGPBitmap zu einer zusammenfügen
Thema durchsuchen
Ansicht
Themen-Optionen

gdi+ 2 TGPBitmap zu einer zusammenfügen

Ein Thema von ATS3788 · begonnen am 15. Feb 2012 · letzter Beitrag vom 16. Feb 2012
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:23 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