Auf ein Image schreiben
hallo NG
ich öffne auf einem Image ein bmp. dies möchte ich nun nachträglich etwas drauf schreiben. hat jemand tipps mfg |
Re: Auf ein Image schreiben
Hallo,
Einfach das Bitmap in ein TBitmap laden. Dann hast du einen Canvas und kannst nach herzenslust drauf schreiben, zeichnen, ... Dann wieder speichern grüße, daniel [EDIT]Hab grad gelesen, dass du es in einem TImage hast. Dort kannst du genauso auf den Canvas zugreifen.
Delphi-Quellcode:
[/EDIT]
image.Picture.Bitmap.Canvas.TextOut(x, y, text);
|
Re: Auf ein Image schreiben
|
Re: Auf ein Image schreiben
procedure TForm1.Button7Click(Sender: TObject);
var begin Image1.Picture.Bitmap.Canvas.TextOut(x , y, text); end; hab folgende fehler erhalten: [Fehler] UNIT1.PAS(153): Bezeichner erwartet, aber 'BEGIN' gefunden [Fehler] UNIT1.PAS(154): Undefinierter Bezeichner: 'x' [Fataler Fehler] project1.dpr(5): Verwendete Unit 'UNIT1.PAS' kann nicht compiliert werden ich erst den button click und dan erlauben auf der bmp zu schreiben. ich bin noch nicht solange dabei mit delphi7 kann mir nochmal geholfen werden :?: vielen dank im vorraus |
Re: Auf ein Image schreiben
Lass das var weg und gibt anstelle von x und y die Koordinaten an.
|
Re: Auf ein Image schreiben
Zitat:
Zitat:
So soll es aussehen:
Delphi-Quellcode:
Das schreibt dir den Text bei den Koordinaten 10,10.
procedure TForm1.Button7Click(Sender: TObject);
begin Image1.Picture.Bitmap.Canvas.TextOut(10 , 10, 'Ich bein eine Bildbeschriftung'); end; Zum speichern des Bildes nimmst du:
Delphi-Quellcode:
grüße, daniel
Image1.Picture.Bitmap.SaveToFile(DateiName);
|
Re: Auf ein Image schreiben
hat mir schon weitergeholfen ich will aber den text erst auf der bmp schreiben
und am besten wär wenn ich per mausklick bestimme wo der text erscheint gruß patrick |
Re: Auf ein Image schreiben
Hallo,
Am einfachsten wäre wohl, wenn ein Edit hast in das du zuerst den Text eingibst, einen Button (einen Speedbutton kannst du einrasten lassen) um in den "Text-am-Bild-platzieren-Modus" zu schalten. Im ButtonClick sagst du dann:
Delphi-Quellcode:
Wobei FTextPickMode ein boolean ist, dass du in der Klasse definieren musst.
FTextPickMode := not FTextPickmode and (edText.Text <> '');
Im OnMouseDown vom Image:
Delphi-Quellcode:
Wenn du den Text direkt am Bild eintippen willst, dann wirds schon etwas komplizierter.
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if FPickMode then begin Image1.Picture.Bitmap.Canvas.TextOut(x , y, edText.Text); end; end; Am einfachsten ist es vermutlich ein Edit dort zu erzeugen, wo du den Text platzierst. Dafür könntest du in der Klasse ein TEdit FTempEdit definieren. Im OnMouseDown vom Image:
Delphi-Quellcode:
Das hab ich jetzt ohne testen mal hingetippt. Kann sein dass ich noch etwas vergessen hab.
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if FPickMode then begin FTempEdit := TEdit.Create(self); FTempEdit.Parent := Image1; FTempEdit.OnExit := EditOnExit; end; end; procedure TForm1.EditOnExit(Sender : TObject); begin Image1.Picture.Bitmap.Canvas.TextOut(FTempEdit.Left , FTempEdit.Top, FTempEdit.Text); FreeAndNil(FTempEdit); end; grüße, daniel |
Re: Auf ein Image schreiben
hallo
habe folgendes eingehagt er compeliert auch, aber wenn ich im edit1 feld etwas reinschreibe und denn button klick tut sich nichts. muss mal ein lob an euch aussprechen ihr seid eine echte Hilfe auch wenns noch nit klappt :thuimb:
Code:
procedure TForm1.Button1Click(Sender: TObject); begin FTextPickMode := not FTextPickmode and (edit1.Text <> ''); end; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if FPickMode then begin Image1.Picture.Bitmap.Canvas.TextOut(x , y, edit1.Text); end; end; end. |
Re: Auf ein Image schreiben
Mir kommt gerade so der Gedanke, dass es weniger schlau ist, das Edit im OnExit freizugeben.
Eventuell isses besser, wenn du gleich ein Edit auf das Formular ziehst und es invisible setzt. Wo ich es im Source vorher erzeugt hätte, setzt du es Visible und setzt die Position. Wo ich es zerstört hätte setzt du es wieder unsichtbar. |
Re: Auf ein Image schreiben
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mal eben sowas in die Richtung gemacht.
Findest im Anhang. |
Re: Auf ein Image schreiben
hallo NG,
ich will jetzt noch den Text Größer haben den ich auf der BMP erstelle hab es hiermit versucht zeigt aber keine wirkung: :coder:
Code:
und hiermit beides leider nicht zum gewünschtem erfolg geführt:
procedure TForm1.edTextKeyPress(Sender: TObject; var Key: Char);
begin edText.Font.Size := 20; end; :coder:
Code:
kann jemand helfen ich glaub ich bin etwas :cyclops: und find den fehler nicht
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if FTextMode then begin edText.Left := X + Image1.Left; edText.Top := Y + Image1.Top; edText.Visible := true; edText.AutoSize := true; edText.Text := ''; edText.Font.Size := 20; :!: darum gehts FTextMode := false; btText.Down := false; end else begin Image1.Picture.Bitmap.Canvas.TextOut(edText.Left - Image1.Left , edText.Top - Image1.Top, edText.Text); edText.Visible := false; end; |
Re: Auf ein Image schreiben
Hallo dedeur,
wiefolgt müsstest du den Text vergrößern können.
Delphi-Quellcode:
Tschüß Markus
with Image1.Picture.Bitmap.Canvas do
begin Font.Size:={Größe einsetzen}; TextOut(edText.Left - Image1.Left , edText.Top - Image1.Top, edText.Text); end; |
Re: Auf ein Image schreiben
@Markus
in welcher procedure :?: |
Re: Auf ein Image schreiben
Du musst es in der Prozedur TForm1.Image1MouseDown anstelle von
Image1.Picture.Bitmap.Canvas.TextOut(edText.Left - Image1.Left , edText.Top - Image1.Top, edText.Text); einfügen. Tschüß Markus [edit=sakura] Mehrfachposts gelöscht ;) Mfg, sakura[/edit] |
Re: Auf ein Image schreiben
so hab ich s gemacht
procedure TForm1.Image1MouseDown(Sender: TObject; Button:
Code:
komischerweise verändert er die schrift des Buttons und nicht was ich schreibe :wall:
TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if FTextMode then begin edText.Left := X + Image1.Left; edText.Top := Y + Image1.Top; edText.Visible := true; edText.AutoSize := true; edText.Text := ''; edText.Color := clRed; edText.Font.Size := 20; FTextMode := false; btText.Down := false; end else begin Font.Size := 20; Image1.Picture.Bitmap.Canvas.TextOut(edText.Left - Image1.Left , edText.Top - Image1.Top, edText.Text,); edText.Visible := false; end; end; |
Re: Auf ein Image schreiben
Zitat:
Delphi-Quellcode:
anstatt
Image1.Picture.Bitmap.Canvas.Font.Size := 20;
Delphi-Quellcode:
Du könntest allerdings auch einen Font-Dialog verwenden und dann einfach den Font zuweisen, wenn der Dialog ausgeführt wurde.
Font.Size := 20;
Wie das geht solltest du problemlos in der OH oder hier finden. grüße, daniel |
Re: Auf ein Image schreiben
:coder: :coder: :coder:
Code:
klappt alles wunder bar, ich will jetzt aber noch den Schriftart verändern den ich aus einem edit Feld ja auf das Image lade
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if FTextMode then begin edText.Left := X + Image1.Left; edText.Top := Y + Image1.Top; edText.Visible := true; edText.AutoSize := true; edText.Text := ''; Image1.Picture.Bitmap.Canvas.Font.Size := 24; //Image1.Picture.Bitmap.Canvas.Font.Color := clblue; // edText.Color := clGreen; FTextMode := false; // btText.Down := false; end else begin Image1.Picture.Bitmap.Canvas.TextOut(edText.Left - Image1.Left , edText.Top - Image1.Top, edText.Text,); edText.Visible := false; end; ich mache folgendes: :coder:
Code:
Er ändert aber nur im Edit feld die Schriftart nicht aber wenn ich sie Überge.
procedure TForm1.Schriftart1Click(Sender: TObject);
begin if FontDialog1.Execute then edText.Font := FontDialog1.Font; end; hat jemand rat wie ich die veränderte Schriftart übergeben kann :?: |
Re: Auf ein Image schreiben
Hi,
Du meinst vermutlich, dass du die Schriftart auch am Bild dann haben willst, oder?
Delphi-Quellcode:
BTW: Würde ich beim anzeigen des Edits auch gleich den Fokus reinsetzen (mit edText.SetFocus;)
procedure TForm1.Schriftart1Click(Sender: TObject);
begin if FontDialog1.Execute then begin edText.Font := FontDialog1.Font; Image1.Picture.Bitmap.Canvas.Font := FontDialog1.Font; end; end; grüße, daniel |
Re: Auf ein Image schreiben
Damit hat es geklappt: :coder:
Code:
bin sogar selber drauf gekommen :lol:
Image1.Picture.Bitmap.Canvas.Font := FontDialog1.Font;
Jetzt will ich aber das der Hintergrund die farbe beibehält, weil die weiße Hintergrundfarbe nicht dahin soll sondern nur der TEXT aufs Image soll Fummel gerade mit dem :arrow: SetBkColor(TransparentColor); versucht klappt aber irgendwie noch nicht :( Viele Grüße an Daniel der hier sehr kooperativ aushilft Vielen dank :thuimb: |
Re: Auf ein Image schreiben
Hallo,
So schaltest du die Hintergrundfarbe des Textes auf transparent:
Delphi-Quellcode:
grüße, daniel
SetBkMode(Image1.Picture.Bitmap.Canvas.Handle, TRANSPARENT);
|
Re: Auf ein Image schreiben
Delphi-Quellcode:
hab es mal so übernommen er führt auch aus jedoch ist der Hintergrund immer noch weiß :gruebel:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if FTextMode then begin edText.Left := X + Image1.Left; edText.Top := Y + Image1.Top; edText.Visible := true; edText.AutoSize := true; edText.Text := ''; // Die gewünschten Einstellungen aus dem FontDiag werden in den TEXT übernommen Image1.Picture.Bitmap.Canvas.Font := FontDialog1.Font; SetBkMode(Image1.Picture.Bitmap.Canvas.Handle, TRANSPARENT); FTextMode := false; end else begin Image1.Picture.Bitmap.Canvas.TextOut(edText.Left - Image1.Left , edText.Top - Image1.Top, edText.Text,); edText.Visible := false; end; |
Re: Auf ein Image schreiben
Ersetz das SetBkMode mal durch
Delphi-Quellcode:
Es reicht allerdings, wenn du diese Zuweisung im OnShow machst.
Image1.Picture.Bitmap.Canvas.Brush.Style := bsClear;
Ist aber eigenartig. Ich hab mal ein Projekt gemacht, wo es mit SetBKMode funktioniert hat. Jetzt hab ich aber das aber bei meinen Anhang von Vorgestern versucht und da hats auch net geklappt :gruebel: |
Re: Auf ein Image schreiben
Hervorragend wär ich heute nicht mehr drauf gekommen.
Wollt jetzt mal versuchen den Text immer in der Mitte des Bitmaps auszugeben... muß ich da mit Position := poScreenCenter; arbeiten :?: Gruß Patrick |
Re: Auf ein Image schreiben
Nö,
du musst doch einfach die Koordinaten beim TextOut anders setzen. Einfach die Mitte vom Bild nehmen und die Text-Abmessungen abziehen. Stichwort: Canvas.TextExtend Die Position := poScreencenter lässt das Fenster immer in der Mitte des Screens auftauchen. grüße, daniel |
Re: Auf ein Image schreiben
Du meinst ich muss diese Zeile:
Code:
abändern?
Image1.Picture.Bitmap.Canvas.TextOut(edText.Left - Image1.Left , edText.Top - Image1.Top, edText.Text,);
Ich versteh das mit dem Canvas.TextExtent noch nicht so ganz :stupid: was macht das den? Ich hab jetzt vermutet ich muss hinter dem Left und Top genaue Koordinaten angeben... |
Re: Auf ein Image schreiben
Mit
Delphi-Quellcode:
fängt der Text in der Mitte an.
Image1.Picture.Bitmap.Canvas.TextOut(Image1.Width div 2 , Image1.Height div 2, edText.Text);
TextExtent liefert dir die Abmessung des Strings. Die kannst du dann noch Abziehen.
Delphi-Quellcode:
grüße, daniel
TextSize := Image1.Picture.Bitmap.Canvas.TextExtend(edText.Text);
Image1.Picture.Bitmap.Canvas.TextOut((Image1.Width - TextSize.cx) div 2, (Image1.Height - TextSize.cy) div 2, edText.Text); |
Re: Auf ein Image schreiben
Der
Code:
funzt super.
Image1.Picture.Bitmap.Canvas.TextOut(Image1.Width div 2 , Image1.Height div 2, edText.Text);
mit dem hab ich so meine Probleme
Code:
er gibt mir den Fehler
TextSize := Image1.Picture.Bitmap.Canvas.TextExtend(edText.Text);
Image1.Picture.Bitmap.Canvas.TextOut((Image1.Width - TextSize.cx) div 2, (Image1.Height - TextSize.cy) div 2, edText.Text);
Delphi-Quellcode:
zurück.
[Fehler] Main.pas(81): Undefinierter Bezeichner: 'TextSize'
[Fehler] Main.pas(81): Undefinierter Bezeichner: 'TextExtend' [Fehler] Main.pas(82): ')' erwartet, aber Bezeichner 'cx' gefunden hab versucht in der procedure eine Variable TextSIze angelgt als String... var TextSize : String; der erste FEhler ist dann weg die andern bleiben bestehen. |
Re: Auf ein Image schreiben
Sorry mein Fehler.
Es heißt TextExtent und Textsize ist vom Type TSize. Mit der OH (F1) hättest du das schneller rausgefunden. grüße, daniel |
Re: Auf ein Image schreiben
ich hab auch noch ne frage!
ähhm ihr erzeugt ja so nur Bitmap Bilder. Gibs das auch für JPG bilder? weil ich hab vor das bild per ftp ins internet hochzuladen. und BMP is mir zu groß. Weiß jemand rat? :gruebel: MFG D@rklanmaster |
Re: Auf ein Image schreiben
Neue Frage, neuer Thread bitte.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz