![]() |
Image als Tbyte umwandeln
Hallo,
ich habe ein Problem. Ich habe ein Bilds aus Tmemorystream ,das ich gezeigt und gedreht habe.Ich will die gedrehetes Bild mit Orginales Bild umtauschen. Ich versuche gedrehtes Bild in Temomerystream zu speichern und die altes löschen,aber ich könnte nicht (image1.picture.graphic)to Tbyte array wexchseln.
Delphi-Quellcode:
procedure TFormFoto.SpeichernClick(Sender: TObject); var lpTblFeature: TpBtrvDBTableData; lpTblGraph: TpBtrvDBTableData; lmstFoto : TMemoryStream; laImage : TaByte; lgrpImage: TGraphic; begin lmstFoto:=Tmemorystream.Create; try Image1.Picture.Graphic.SaveToStream(lmstFoto); laImage:= GetBlob(RelData('GR')); lmstFoto.Position := 0; if lGetRecord(RelData('GR'), 1) then begin InitRelation('GR', false); PutSField('GR', 1, 'CP'); PutIdField('GR', 2, 20); Searchrecord('GR', 1); // DeleteRecord('GR'); end; PutSField('GR', 1, 'CP'); PutIdField('GR', 2, 34); PutBlob ('GR',laImage); InsertRecord2('GR'); finally lmstFoto.Free; end; end; |
AW: Image als Tbyte umwandeln
Ich verstehe nur Bahnhof. Gerade was den Code angeht, aber ich werfe einfach mal TBytesStream in den Raum.
Funktioniert wie TMemoryStream, aber hat eine Property "Bytes" die den Inhalt des Streams als Byte-Array zurückgibt. Vielleicht hilft dir das schon. |
AW: Image als Tbyte umwandeln
Zitat:
ICh habe ein Bild ,das ich aus Tmemorystream geladet. nach bestimmten BEarbeitund des Bildes,will ich diese Bild statt orginales Bild in Tmemorystream Speichern ??? |
AW: Image als Tbyte umwandeln
Es ist ganz hilfreich, wenn die Anfragen in einen gut lesbaren Deutsch geschrieben werden.
Das hat was mit Wertschätzung zu tun und motiviert dadurch die Antwortenden, überhaupt was zu schreiben. Solltest du Legastheniker oder kein Muttersprachler sein, nutze doch bitte zum Beispiel Microsoft Word zum Schreiben der Beiträge und die darin enthaltene Rechtschreibprüfung und Korrektur. Leider sieht man in deinen Quelltext-Schnipsel nicht, was genau du mit dem MemoryStream machst außer zu erzeugen, das Bild reinzuladen und freizugeben. Solltest du zum Beispiel auf einer Kopie der Daten aus dem Stream arbeiten, könntest du TMemoryStream.Clear aufrufen und per Write-Funktionen die neuen Daten zurückschreiben. |
AW: Image als Tbyte umwandeln
Dein Code hat auch keinen Zusammenhang und 90% davon sind Funktionsaufrufe zu deinen eigenen Funktionen die hier niemand kennt.
Wenn dein bearbeitetes Bild in Image1 ist, dann tust du was du willst doch schon längst:
Delphi-Quellcode:
Vielleicht stell ich mich auch nur doof an, aber ich verstehe nicht wo genau das Problem ist.
// Das speichert dein (bearbeitetes?) Bild in einen MemoryStream
Image1.Picture.Graphic.SaveToStream(lmstFoto); Kannst du mal genauer erklären/zeigen wo dein bearbeitetes Bild überhaupt drin ist oder evtl sogar wie du das Bild bearbeitest? Meine weit hergeholte Vermutung ist, dass du mit Image1.Canvas versuchst das Bild zu bearbeiten :?: :glaskugel: Falls das der Fall ist, dann ist das das Problem. mit Image1.Canvas malst du nicht auf das Bild, sondern auf den "Rahmen". Wenn du das Bild selbst bearbeiten willst, brauchst du ein Bitmap. Falls dein Bild in Image1 kein Bitmap ist, musst du es in ein TBitmap umwandeln. Dann kannst du das Bild per Bitmap.Canvas bearbeiten und dann Bitmap.SaveToStream wieder abspeichern. |
AW: Image als Tbyte umwandeln
How do you rotate the image?
Do you rotate it by changing the orientation tag in jpg header? This can be done directly in the memorystream by modifying the appropriate bytes. Best regards Klaus |
AW: Image als Tbyte umwandeln
Zitat:
Delphi-Quellcode:
procedure TFormFoto.ZeigeFoto(DB: String; ID: TiBtrvID);
var lpTblGraph: TpBtrvDBTableData; lbmpImage: TBitmap; lmstImage: TMemoryStream; laImage : TaByte; lgrpImage: TGraphic; ljpgImage: TJPEGImage; lpicImage: TPictureTyp; begin lbmpImage := nil; lmstImage := nil; ljpgImage := nil; try lbmpImage := TBitmap.Create; lmstImage := TMemoryStream.Create; lpTblGraph := RelData('GR'); PutSField('GR', 1, DB); PutIdField('GR', 2, ID); if lGetRecord(lpTblGraph, 1) then begin {$IFDEF TITAN} laImage := GetBlob(lpTblGraph); {$ENDIF} // DEF TITAN lmstImage.Clear; lmstImage.Write(laImage[0], Length(laImage)); lmstImage.Position := 0; lpicImage := PictureTyp_pruefen(lmstImage); case lpicImage of pw_JPG: begin lmstImage.Clear; lmstImage.Write(laImage[0], Length(laImage)); lmstImage.Position := 0; ljpgImage := TJPEGImage.Create; ljpgImage.LoadFromStream(lmstImage); try lbmpImage.Assign(ljpgImage); lgrpImage.Free; lgrpImage := lbmpImage; Image1.picture.Graphic := (lgrpImage); finally ljpgImage.Free; end; end; pw_BMP: begin lbmpImage.Transparent := True; lbmpImage.LoadFromStream(lmstImage); lbmpImage.TransparentColor := lbmpImage.Canvas.Pixels[0,lbmpImage.Height - 1]; lbmpImage.ReleaseMaskHandle; lgrpImage.Free; lgrpImage := lbmpImage; Image1.picture.Graphic := (lgrpImage); end; pw_None: begin Application.MessageBox('ungultiges Foto', 'AIDA',MB_OK or MB_ICONERROR); end; end; FormFoto.Caption := DB + '-' + IntToStr(ID); FotoResize; end else begin lgrpImage := nil; end; finally lmstImage.Free; lbmpImage.Free; end; end; das bild aus DatenBank gezeigt:
Delphi-Quellcode:
ich bearbeite an das Bild ,und dann wechsle ich mit (Button Klick)neues Bild mit Orginales Bild
laImage := GetBlob(lpTblGraph);
|
AW: Image als Tbyte umwandeln
Zitat:
Delphi-Quellcode:
procedure TFormFoto.rotate90(const aSource: TGraphic; Bmp: TBitmap);
var SourceBmp : TBitmap; SourcePixel, DestPixel : PRGBQuad; Y, X, SourceWidth, SourceHeight: Integer; begin SourceBmp := TBitmap.Create; try SourceBmp.PixelFormat := pf32bit; SourceBmp.Height := aSource.Height; SourceBmp.Width := aSource.Width; SourceBmp.Canvas.Draw(0, 0, aSource); SourceHeight := SourceBmp.Height; SourceWidth := SourceBmp.Width; Bmp.PixelFormat := pf32bit; Bmp.Height := SourceWidth; Bmp.Width := SourceHeight; for Y := 0 to SourceWidth - 1 do begin DestPixel := Bmp.ScanLine[Y]; SourcePixel := SourceBmp.ScanLine[SourceBmp.Height - 1]; Inc(SourcePixel, Y); for X := 0 to SourceHeight - 1 do begin DestPixel^ := SourcePixel^; Inc(SourcePixel, SourceWidth); Inc(DestPixel); end; end; finally SourceBmp.Free; end; end; procedure TFormFoto.Drehennach1Click(Sender: TObject); Var Bmap:Tbitmap; begin Bmap := TBitmap.Create; try rotate90(Image1.Picture.Graphic, Bmap); Image1.Picture.Assign(Bmap); Panel1.Width :=Bmap.Width; PAnel1.Height:=Bmap.Height; Image1.Refresh; finally Bmap.Free; end; end; |
AW: Image als Tbyte umwandeln
wenn Du das gedrehte BMP als jpg speichern willst musst Du das Bitmap einer jpg Instanz zuweisen. Die TJpegImage Klasse hat auch eine Methode um in einen Stream zu schreiben.
Delphi-Quellcode:
PS: ich weiß das der Memorystream nicht instantiiert ist.
var
jpg: TJpegImage; bmp: TBitmap; mStream: TMemoryStream; begin try jpg := TJpegImage.Create; try bmp := TBitmap.Create; try // do something with bmp jpg.Assign(bmp); jpg.SaveToStream(mStream); finally bmp.Free; end; finally jpg.Free; end; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. Grüße Klaus |
AW: Image als Tbyte umwandeln
das funktioniert nicht.Das Bild ist nicht geändert.
gibt es eine Methode,mit der kann ich ein Foto Als TBayte in TmemoryStream abspeicheren |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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