Einzelnen Beitrag anzeigen

zeina

Registriert seit: 8. Jun 2018
56 Beiträge
 
#7

AW: Image als Tbyte umwandeln

  Alt 16. Mai 2019, 12:37
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:
// Das speichert dein (bearbeitetes?) Bild in einen MemoryStream
Image1.Picture.Graphic.SaveToStream(lmstFoto);
Vielleicht stell ich mich auch nur doof an, aber ich verstehe nicht wo genau das Problem ist.
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
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.


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:
laImage := GetBlob(lpTblGraph); ich bearbeite an das Bild ,und dann wechsle ich mit (Button Klick)neues Bild mit Orginales Bild
  Mit Zitat antworten Zitat