Wie hast du das Bitmap denn Ohne in den Stream bekommen?
Es gibt zwei Wege, die man sich eigentlich hätte denken können,
denn wie machst du es bei einem String, wenn du am Anfang einen Char reingekommen möchtest?
Das was vorne hinzukommen soll, ist/kommt in einem neuen Stream und der andere Bitmap-Stream wird hinten angehängt (Position auf das Ende und dann die Stream-Copy-Methode benutzen)
oder
man verschiebt kopiert den Inhalt des Bitmap-Streams um die entsprechende Anzahl an Bytes nach hinten und fügt dann davor den Header ein (also die ersten Bytes überschreiben, deswegen vorher kopieren).
Ich wollte eigentlich wissen wie der Header aufgebaut ist so das ich diesen in den Stream packen kann.
Ich habe das Bitmap aber nicht den Header verstehst ?
Delphi-Quellcode:
procedure TForm1.btnCaptureClick(Sender: TObject);
var
Background: TBitmap;
ARect: TRect;
i: Integer;
Left, Top: Integer;
begin
Background := TBitmap.Create;
Left := 0;
Top := 0;
try
Background.Height := 48;
Background.Width := 64;
Background.Canvas.Brush.Style := bsSolid;
Background.Canvas.Brush.Color := clfuchsia;
ARect := Background.Canvas.ClipRect;
Background.Canvas.FillRect(ARect);
for i := 1 to 64 do
begin
ARect.Left := Left;
ARect.Top := 0;
ARect.Right := 1 + Left;
ARect.Bottom := 1;
Background.Canvas.Brush.Color := CaptureX.pTop[I].Color;
Background.Canvas.FillRect(ARect);
ARect.Left := Left;
ARect.Top := 47;
ARect.Right := 1 + Left;
ARect.Bottom := 48;
Background.Canvas.Brush.Color := CaptureX.pBottom[I].Color;
Background.Canvas.FillRect(ARect);
inc(Left);
end;
for i := 1 to 48 do
begin
ARect.Left := 0;
ARect.Top := Top;
ARect.Right := 1;
ARect.Bottom := 1 + Top;
Background.Canvas.Brush.Color := CaptureX.pLeft[I].Color;
Background.Canvas.FillRect(ARect);
ARect.Left := 64;
ARect.Top := Top;
ARect.Right := 63;
ARect.Bottom := 1 + Top;
Background.Canvas.Brush.Color := CaptureX.pRight[I].Color;
Background.Canvas.FillRect(ARect);
inc(Top);
end;
finally
CaptureX.BitmapStream := TMemoryStream.Create;
Background.SaveToStream(CaptureX.BitmapStream);
Background.Free;
end;
end
bei bm.SaveToFile('C:\Test.bmp');
muss ich den Header nicht addieren das macht SaveToFile schon selbst.
Diese soll aber nicht abgespeichert werden weil sie über einen
Ole-Server an eine andere Anwendung weitergeleitet wird.
function setPixelData(bitmapInfoHeader: PSafeArray; pixelData: PSafeArray): HResult; stdcall;
gruss