![]() |
Gescanntes Bild transparent machen – Grafikprogramm gesucht
Hallo Community,
ich suche eine Software, die gescannte Files (z. B. *.BMP oder *.jpg) ganz transparent machen kann, so daß beim Übereinanderlegen zweier Bilder das darunterliegende sichtbar bleibt. Wozu brauche ich das? Ich habe diverse gescannte Kurvenverläufe etc. aus unterschiedlichen Quellen und möchte gerne rein "optisch" feststellen, ob die beiden Darstellungen identisch sind. Dazu möchte ich die Bilder zunächst unterschiedlich einfärben und danach bei identischer Größe übereinander legen und schauen, ob die Kurven und Meßpunkte halbwegs deckungsgleich sind. Kennt jemand ein Programm, welches dazu in der Lage ist? Danke Euch im Voraus! Viele Grüße Andreas |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Paint.net und dort dann mit Bildebenen arbeiten?
Download: ![]() Wie wird's gemacht? ![]() |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Nja, erstmal brauchst du was, das leichte grautöne entfernt,
also das leichte Rauschen, Flecken usw. auf dem Papier. Sowas sollte z.B. Gimp können. Und wenn der Hintergrund schön ein "reines" weiß ist, kannst du mit einer PNG-Komponente oder auch extern (Gimp) das Weiß ($FFFFFF) durch Transparenz ersetzen. TBitmap kann beim Malen auch Masken, bzw. eine Transparenzfarbe behandeln. (im Paint des TImage abgucken oder im Forum suchen) |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Ich glaube, man könnte das mit Photoshop machen. Das Program unterschtützt die Layers und für jeden Layer kann man die Transparenz einstellen. Wenn ich mich nicht irre...
|
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Vielen Dank für Eure prompte Hilfe! :thumb:
Ich werde mein Glück mit Euren Empfehlungen versuchen und berichten! Viele Grüße Andreas |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Noch eine Stimme für paint.net
Klein, praktisch, kostenlos und vom Funktionsumfang her überschaubar und daher für Einsteiger auch schnell zu nutzen (wenn man sich mal mit Ebenen beschäftigt hat oder sich das mal vorher anschaut) |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Innerhalb Delphi, habs nicht probiert aber sollte machbar sein, meine theorie ->
Erstelle 2 x eine Form mit einem TImage (alClient) drauf und einem TTrackBar (alBottom). Setze jeweils der TTrackBar einen gültigen Wert von 0 bis 255. Den TTrackBar mit der AlphaBlendValue der Form verknüpfen und AlphaBlend auf True setzen. Beide Formulare exakt übereinander setzen lassen und welche Form auch immer oben ist, mit dem TTrackBar stückchenweise transparent machen. Hilft das weiter? |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Danke auch Dir, KodeZwerg! :thumb:
Von Grafik-Programmierung verstehe ich nur seeehr wenig, werde ich aber auch Deinen Vorschlag ausprobieren und über meine Erfahrung berichten. Viele Grüße Andreas |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Quelltext und ein mit TurboDelphi erstelltes Kompilat ist dabei, es scheint so als ob es nur BMP kann aber als Demonstration reicht es alle male aus. Bedienung: Starte "LayeredImages.exe" und es erscheint ein minimales Form auf dem Desktop mit nur einem Knopf. Drück den Knopf und es wird zwei mal hintereinander ein Öffnen Dialog dargestellt bei dem du je eine Datei aussuchen kannst. Wenn dies geklappt hat werden zwei Formulare überlappend dargestellt. Beide besitzen eine TrackBar um die Transparenz zu beeinflussen. Was auch immer oben sein mag, das darunter liegende wird sichtbar umso mehr du die TrackBar nach links ziehst. Vielleicht hilft es Dir, viel Glück! |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
PS: Das wäre nur der Quelltext ->
Delphi-Quellcode:
unit uMain;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ExtCtrls, ExtDlgs, StdCtrls; type TfrmMain = class(TForm) btnGo: TButton; procedure btnGoClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } FFileA, FFileB: string; FFormA, FFormB: TForm; FImageA, FImageB: TImage; FTrackBarA, FTrackBarB: TTrackBar; function GetImageFilename: string; procedure TrackBarAChange(Sender: TObject); procedure TrackBarBChange(Sender: TObject); public { Public declarations } end; var frmMain: TfrmMain; implementation {$R *.dfm} procedure TfrmMain.FormCreate(Sender: TObject); begin FFormA := TForm.Create(Self); try FFormA.Parent := Self.Parent; FFormA.Height := 800; FFormA.Width := 800; FFormA.Position := poScreenCenter; FFormA.BorderStyle := bsDialog; FFormA.AlphaBlend := True; FFormA.Visible := False; FImageA := TImage.Create(FFormA); try FImageA.Parent := FFormA; FImageA.Align := alClient; FImageA.Stretch := True; FTrackBarA := TTrackBar.Create(FFormA); try FTrackBarA.Parent := FFormA; FTrackBarA.Align := alBottom; FTrackBarA.Min := 0; FTrackBarA.Max := 255; FTrackBarA.Position := 255; FTrackBarA.OnChange := TrackBarAChange; finally // FTrackBarA.Free; end; finally // FImageA.Free; end; finally // FFormA.Free; end; FFormB := TForm.Create(Self); try FFormB.Parent := Self.Parent; FFormB.Height := 800; FFormB.Width := 800; FFormB.Position := poScreenCenter; FFormB.BorderStyle := bsDialog; FFormB.AlphaBlend := True; FFormB.Visible := False; FImageB := TImage.Create(FFormB); try FImageB.Parent := FFormB; FImageB.Align := alClient; FImageB.Stretch := True; FTrackBarB := TTrackBar.Create(FFormB); try FTrackBarB.Parent := FFormB; FTrackBarB.Align := alBottom; FTrackBarB.Min := 0; FTrackBarB.Max := 255; FTrackBarB.Position := 255; FTrackBarB.OnChange := TrackBarBChange; finally // FTrackBarB.Free; end; finally // FImageB.Free; end; finally // FFormB.Free; end; end; procedure TfrmMain.FormDestroy(Sender: TObject); begin FTrackBarB.Free; FImageB.Free; FFormB.Free; FTrackBarA.Free; FImageA.Free; FFormA.Free; end; procedure TfrmMain.TrackBarAChange(Sender: TObject); begin FFormA.AlphaBlendValue := (Sender As TTrackBar).Position; end; procedure TfrmMain.TrackBarBChange(Sender: TObject); begin FFormB.AlphaBlendValue := (Sender As TTrackBar).Position; end; function TfrmMain.GetImageFilename: string; var dlg: TOpenPictureDialog; begin Result := ''; dlg := TOpenPictureDialog.Create(Self); try dlg.Options := [ofPathMustExist, ofFileMustExist, ofDontAddToRecent, ofForceShowHidden]; if dlg.Execute(Self.Handle) then Result := dlg.FileName; finally dlg.Free; end; end; procedure TfrmMain.btnGoClick(Sender: TObject); begin FFileA := GetImageFilename; if FFileA = '' then Exit; FFileB := GetImageFilename; if FFileB = '' then Exit; FFormA.Caption := FFileA; try FImageA.Picture.LoadFromFile(FFileA); except Exit; end; FFormB.Caption := FFileB; try FImageB.Picture.LoadFromFile(FFileB); except Exit; end; FFormA.Position := poScreenCenter; FFormB.Position := poScreenCenter; FFormA.Visible := True; FFormB.Visible := True; end; end. |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Hallo KodeZwerg,
ab sofort bist Du für mich der KodeRIESE! Dein Programm funktioniert exzellent! :thumb: :angel: Vielen-vielen Dank für Deine & und Eure Hilfe und für alle Tipps! :thumb: Ihr habt mir sehr geholfen! Danke & viele Grüße Andreas |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Hallo Andreas, das freut mich wenn ich Dir damit eine Freude bereiten konnte. :thumb:
Ich glaube in dem TurboDelphi müsste man manuell "JPEG" "PNG" usw units einbinden für mehr Dateiformate... aber ist zu lange her :P Ist halt nur auf die schnelle runtergetippst, kann man bestimmt noch eleganter machen aber es erspart einem eine Graphic-Anwendung zu installieren die das selbe macht :wink: |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Hallo "KodeRIESE",
BMP’S sind OK für meine Zwecke. Nach einer winzigen Anpassung - weil die Größe der gescannten Bilder je nach Literaturquelle manchmal doch unterschiedlich ist -
Delphi-Quellcode:
ist Dein Programm perfekt für meine Zwecke.
BorderStyle := bsSizeable;
Auch habe ich paint.net und Gimp runtergeladen und werde sie demnächst ausprobieren. Noch einmal herzlichen Dank & viele Grüße an Euch :thumb: :-D Andreas |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Ich verstehe, man kann dafür auch das Resize Event nutzen um beide Forms synchron zu halten mit der Größe (aus Faulheit hatte ich es bewusst als non-sizeable gemacht :-D)
Ahh, ich vermute Du meinst BildA ist so und so skaliert und BildB eben etwas anders... dann natürlich nicht synchron :D |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, exakt! Hier ist mal ein bebildertes Beispiel (s. Anhang) zum konkreten Nachvollziehen meiner Problematik.
Die beiden Kurven (= Fraktionsabscheidegrade zweier spezieller Gaszyklone) aus einer neueren Quelle (Fachbuch aus dem Jahr 1999 = Sekundärliteratur) habe ich schon lange gehabt. Aufgrund dieser Darstellungen hatte ich die Kurven digitalisiert und sie – mit viel Mühe und Zeitaufwand – durch eine physikalisch begründete Gleichung beschrieben. Nach langen Bemühungen konnte ich endlich vorgestern die Originalquelle (Fachzeitschrift aus dem Jahre 1951 = Primärliteratur) erwerben. Es stellte sich die Frage, wie gut wohl die "Reproduktion" der Originalkurven in der Sekundärliteratur war, auf der meine ganze Rechenarbeit basierte. Kurz und gut: Muß ich alles noch einmal machen, weil jemand (der Verfasser, der Zeichner oder die Druckerei der Sekundärliteratur) evtl. geschlampert hat? Und diese Frage kann ich durch Skalieren beider Koordinatensysteme und Übereinanderlegen der Diagramme mit Hilfe Deines tollen Programms recht sicher beantworten. :thumb: Danke & Grüße, Andreas :-D |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Zitat:
|
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Zitat:
|
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
@Andreas
Ich verstehe nicht 100% was du machen willst, aber wenn es drum geht deine Bilder durchsichtig zu machen, dh die weiße Farbe zu entfernen, so dass nur die Linien bleiben, dann ist das relativ einfach. Dazu kannst du das kostenlose Programm IrfanViewer nutzen:
|
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Hallo Alallart,
danke für Deinen Lösungsvorschlag! :-D Seit ca. 2 Jahren habe auch ich IrfanView auf meinem PC installiert. Bin sehr enttäuscht davon. Es hat zwar einige gute und zeitgemäße Funktionen ("features"), aber es ist extrem umständlich in der Handhabung. :( Rund 20 Jahre lang hatte ich davor ACDSee310 aus dem Jahre 2000 (!) benutzt :-D : Irfan könnte sich vieles in puncto Bedienerfreundlichkeit von ACDSee310 abgucken und nachprogrammieren. Was mich zur Installation von IrfanView bewegt hat, war primär Windows 10: ACDSee310 will unter Windows10 ständig ins Internet, bevor es auf den User reagiert. Ich arbeite meistens offline und mußte oft nach jedem Programmstart 1..2 Minuten warten und einige blöde Fragen zum Verzicht der "Online-Vorteile" bestätigen, bevor ACDSee310 bereit war, sich mit mir abzugeben. Leider wurde die etwas neuere Version ACDSee 5.0 "zu Tode programmiert" und vollkommen unbrauchbar gemacht. Verstehe nicht (und das gilt für vieeeeeeele kommerzielle Programme), warum ständig nur an der Optik herumgebastelt wird, anstelle die Funktionalität zu verbessern und bekannte Fehler auszumerzen. Aber ich muß ja nicht alles verstehen ... :lol: Zitat:
Delphi-Quellcode:
neu kompilieren.
FFormA.BorderStyle := bsSizeable;
... FFormB.BorderStyle := bsSizeable; Grüße, Andreas |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Ich habe noch etwas rumgefrickelt und das ist dabei rausgekommen
Dieses mal mit Alexandria und inklusive jpeg/gif/png. Wenn nun eine der beiden Forms beendet wird, schließt sich das andere automatisch. Ein druck auf die Leertaste lässt dich zwischen den Forms hin und her springen. Ein druck auf die Abbrechen (Escape) taste, beendet rasch beide Forms. Minimum AlphaBlend auf Wert 15 gesetzt damit man kein absolut durchsichtiges Fenster erhalten kann. Per CheckBox ist nun eine Möglichkeit gegeben das bei einem erneuten laden die Forms zurückgesetzt werden können. Hier ist der Quelltext und im Anhang ein fertiges 64bit Kompilat.
Delphi-Quellcode:
Viel Spass damit!
unit uMain;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.ComCtrls, Vcl.ExtDlgs, Vcl.Imaging.jpeg, Vcl.Imaging.pngimage, Vcl.Imaging.GIFImg; type TfrmMain = class(TForm) pnlOptions: TPanel; btnGo: TButton; cbReset: TCheckBox; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure btnGoClick(Sender: TObject); private { Private declarations } FFileA, FFileB: string; FFormA, FFormB: TForm; FImageA, FImageB: TImage; FTrackBarA, FTrackBarB: TTrackBar; function GetImageFilename: string; procedure TrackBarAChange(Sender: TObject); procedure TrackBarBChange(Sender: TObject); procedure FormAClose(Sender: TObject; var Action: TCloseAction); procedure FormBClose(Sender: TObject; var Action: TCloseAction); procedure FormAKeyPress(Sender: TObject; var Key: Char); procedure FormBKeyPress(Sender: TObject; var Key: Char); procedure ResetForms; public { Public declarations } end; var frmMain: TfrmMain; implementation {$R *.dfm} procedure TfrmMain.FormCreate(Sender: TObject); begin FFormA := TForm.Create(Self); try FFormA.Parent := Self.Parent; FFormA.Height := 800; FFormA.Width := 800; FFormA.Position := poScreenCenter; FFormA.BorderStyle := bsSizeToolWin; FFormA.AlphaBlend := True; FFormA.Visible := False; FFormA.KeyPreview := True; FFormA.OnClose := FormAClose; FFormA.OnKeyPress := FormAKeypress; FImageA := TImage.Create(FFormA); try FImageA.Parent := FFormA; FImageA.Align := alClient; FImageA.Stretch := True; FTrackBarA := TTrackBar.Create(FFormA); try FTrackBarA.Parent := FFormA; FTrackBarA.Align := alBottom; FTrackBarA.Max := 255; FTrackBarA.Min := 15; FTrackBarA.Position := 255; FTrackBarA.Frequency := 25; FTrackBarA.OnChange := TrackBarAChange; finally end; finally end; finally end; FFormB := TForm.Create(Self); try FFormB.Parent := Self.Parent; FFormB.Height := 800; FFormB.Width := 800; FFormB.Position := poScreenCenter; FFormB.BorderStyle := bsSizeToolWin; FFormB.AlphaBlend := True; FFormB.Visible := False; FFormB.KeyPreview := True; FFormB.OnClose := FormBClose; FFormB.OnKeyPress := FormBKeypress; FImageB := TImage.Create(FFormB); try FImageB.Parent := FFormB; FImageB.Align := alClient; FImageB.Stretch := True; FTrackBarB := TTrackBar.Create(FFormB); try FTrackBarB.Parent := FFormB; FTrackBarB.Align := alBottom; FTrackBarB.Max := 255; FTrackBarB.Min := 15; FTrackBarB.Position := 255; FTrackBarB.Frequency := 25; FTrackBarB.OnChange := TrackBarBChange; finally end; finally end; finally end; end; procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction); begin FTrackBarB.Free; FImageB.Free; FFormB.Free; FTrackBarA.Free; FImageA.Free; FFormA.Free; Action := caFree; end; procedure TfrmMain.FormAClose(Sender: TObject; var Action: TCloseAction); begin if FFormB.Visible then FFormB.Visible := False; FFormA.Visible := False; Action := caNone; end; procedure TfrmMain.FormBClose(Sender: TObject; var Action: TCloseAction); begin if FFormA.Visible then FFormA.Visible := False; FFormB.Visible := False; Action := caNone; end; procedure TfrmMain.FormAKeyPress(Sender: TObject; var Key: Char); begin case Key of Char(VK_ESCAPE): FFormA.Close; Char(VK_SPACE): begin FFormB.BringToFront; FFormB.SetFocus; end; end; end; procedure TfrmMain.FormBKeyPress(Sender: TObject; var Key: Char); begin case Key of Char(VK_ESCAPE): FFormB.Close; Char(VK_SPACE): begin FFormA.BringToFront; FFormA.SetFocus; end; end; end; procedure TfrmMain.TrackBarAChange(Sender: TObject); begin FFormA.AlphaBlendValue := (Sender As TTrackBar).Position end; procedure TfrmMain.TrackBarBChange(Sender: TObject); begin FFormB.AlphaBlendValue := (Sender As TTrackBar).Position end; function TfrmMain.GetImageFilename: string; const CFilter = string( 'Alle Dateien (*.*)|*.*|'+ 'Alle Bilder|*.gif;*.jpg;*.jpeg;*.png;*.bmp;*.ico;*.emf;*.wmf;*.tif;*.tiff|'+ 'GIF Images|*.gif|'+ 'JPEG Images|*.jpg;*.jpeg|'+ 'Portable Network Graphics|*.png|'+ 'Bitmaps|*.bmp|'+ 'Icons|*.ico|'+ 'Enhanced Metafiles|*.emf|'+ 'Metafiles|*.wmf|'+ 'TIFF Images|*.tif;*.tiff' ); var dlg: TOpenDialog; begin Result := ''; dlg := TOpenDialog.Create(Self); try dlg.Options := [ofPathMustExist, ofFileMustExist, ofDontAddToRecent, ofForceShowHidden]; dlg.Filter := CFilter; dlg.FilterIndex := 2; dlg.Title := 'Bitte wählen Sie eine gültige Bild-Datei aus.'; if dlg.Execute(Self.Handle) then Result := dlg.FileName; finally dlg.Free; end; end; procedure TfrmMain.ResetForms; begin FFormA.Position := poDesigned; FFormB.Position := poDesigned; FFormA.Top := 0; FFormB.Top := 0; FFormA.Width := 800; FFormA.Height := 800; FFormB.Width := 800; FFormB.Height := 800; FTrackBarA.Position := 255; FTrackBarB.Position := 255; FFormA.Position := poScreenCenter; FFormB.Position := poScreenCenter; end; procedure TfrmMain.btnGoClick(Sender: TObject); begin if FFormA.Visible then FFormA.Visible := False; if FFormB.Visible then FFormB.Visible := False; FFileA := GetImageFilename; if FFileA = '' then Exit; FFileB := GetImageFilename; if FFileB = '' then Exit; try FImageA.Picture.LoadFromFile(FFileA); except Exit; end; try FImageB.Picture.LoadFromFile(FFileB); except Exit; end; if (UpperCase(ExtractFilePath(FFileA)) = UpperCase(ExtractFilePath(FFileB))) then begin FFormA.Caption := ExtractFileName(FFileA); FFormB.Caption := ExtractFileName(FFileB); end else begin FFormA.Caption := FFileA; FFormB.Caption := FFileB; end; if cbReset.Checked then ResetForms; FFormA.Visible := True; FFormB.Visible := True; end; end. //edit Kompilat entfernt um platz zu sparen, neues ist in letzter post von mir. |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Danke! :thumb: :thumb:
Grüße, Andreas |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Änderungen: Nun hat man bereits im Hauptform 2 kleine Bilder sichtbar. Ein klick auf ein Bild öffnet einen Dialog zur Dateiauswahl oder man drückt wie gehabt auf den fetten Knopf :-D Auf die WIC-Engine umgestellt um noch mehr Formate zu unterstützen. Hier der komplette Quelltext:
Delphi-Quellcode:
Im Anhang ein 32bit Kompilat um es sofort zu testen.
unit uMain;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.ComCtrls, Vcl.Imaging.jpeg, Vcl.Imaging.pngimage, Vcl.Imaging.GIFImg; type TfrmMain = class(TForm) pnlImages: TPanel; pnlImgB: TPanel; pnlImgA: TPanel; ImgA: TImage; ImgB: TImage; btnGo: TButton; pnlOptions: TPanel; cbReset: TCheckBox; lblFileA: TLabel; lblFileB: TLabel; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure btnGoClick(Sender: TObject); procedure ImgAClick(Sender: TObject); procedure ImgBClick(Sender: TObject); private { Private declarations } FFileA, FFileB: string; FFormA, FFormB: TForm; FImageA, FImageB: TImage; FTrackBarA, FTrackBarB: TTrackBar; function GetImageFilename: string; procedure TrackBarAChange(Sender: TObject); procedure TrackBarBChange(Sender: TObject); procedure FormAClose(Sender: TObject; var Action: TCloseAction); procedure FormBClose(Sender: TObject; var Action: TCloseAction); procedure FormAKeyPress(Sender: TObject; var Key: Char); procedure FormBKeyPress(Sender: TObject; var Key: Char); procedure ResetForms; public { Public declarations } end; var frmMain: TfrmMain; implementation {$R *.dfm} resourcestring FileAText = string('Press left box to select a file.'); FileBText = string('Press right box to select a file.'); FileError = string('File format error!'); procedure TfrmMain.FormCreate(Sender: TObject); begin FFormA := TForm.Create(Self); try FFormA.Parent := Self.Parent; FFormA.Height := 800; FFormA.Width := 800; FFormA.Position := poScreenCenter; FFormA.BorderStyle := bsSizeToolWin; FFormA.AlphaBlend := True; FFormA.Visible := False; FFormA.KeyPreview := True; FFormA.OnClose := FormAClose; FFormA.OnKeyPress := FormAKeypress; FImageA := TImage.Create(FFormA); try FImageA.Parent := FFormA; FImageA.Align := alClient; FImageA.IncrementalDisplay := True; FImageA.Center := True; FImageA.Stretch := True; FTrackBarA := TTrackBar.Create(FFormA); try FTrackBarA.Parent := FFormA; FTrackBarA.Align := alBottom; FTrackBarA.Max := 255; FTrackBarA.Min := 15; FTrackBarA.Position := 255; FTrackBarA.Frequency := 25; FTrackBarA.OnChange := TrackBarAChange; finally end; finally end; finally end; FFormB := TForm.Create(Self); try FFormB.Parent := Self.Parent; FFormB.Height := 800; FFormB.Width := 800; FFormB.Position := poScreenCenter; FFormB.BorderStyle := bsSizeToolWin; FFormB.AlphaBlend := True; FFormB.Visible := False; FFormB.KeyPreview := True; FFormB.OnClose := FormBClose; FFormB.OnKeyPress := FormBKeypress; FImageB := TImage.Create(FFormB); try FImageB.Parent := FFormB; FImageB.Align := alClient; FImageB.IncrementalDisplay := True; FImageB.Center := True; FImageB.Stretch := True; FTrackBarB := TTrackBar.Create(FFormB); try FTrackBarB.Parent := FFormB; FTrackBarB.Align := alBottom; FTrackBarB.Max := 255; FTrackBarB.Min := 15; FTrackBarB.Position := 255; FTrackBarB.Frequency := 25; FTrackBarB.OnChange := TrackBarBChange; finally end; finally end; finally end; lblFileA.Caption := FileAText; lblFileB.Caption := FileBText; ImgA.Picture.WICImage.LoadFromResourceName(HInstance, 'DefaultImage'); ImgA.Repaint; ImgB.Picture.WICImage.LoadFromResourceName(HInstance, 'DefaultImage'); ImgB.Repaint; end; procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction); begin FTrackBarA.Free; FTrackBarB.Free; FImageA.Free; FImageB.Free; FFormA.Free; FFormB.Free; Action := caFree; end; procedure TfrmMain.FormAClose(Sender: TObject; var Action: TCloseAction); begin if FFormB.Visible then FFormB.Visible := False; FFormA.Visible := False; Action := caNone; end; procedure TfrmMain.FormBClose(Sender: TObject; var Action: TCloseAction); begin if FFormA.Visible then FFormA.Visible := False; FFormB.Visible := False; Action := caNone; end; procedure TfrmMain.FormAKeyPress(Sender: TObject; var Key: Char); begin case Key of Char(VK_ESCAPE): FFormA.Close; Char(VK_SPACE) : begin FFormB.BringToFront; FFormB.SetFocus; end; end; end; procedure TfrmMain.FormBKeyPress(Sender: TObject; var Key: Char); begin case Key of Char(VK_ESCAPE): FFormB.Close; Char(VK_SPACE) : begin FFormA.BringToFront; FFormA.SetFocus; end; end; end; procedure TfrmMain.TrackBarAChange(Sender: TObject); begin FFormA.AlphaBlendValue := (Sender As TTrackBar).Position end; procedure TfrmMain.TrackBarBChange(Sender: TObject); begin FFormB.AlphaBlendValue := (Sender As TTrackBar).Position end; function TfrmMain.GetImageFilename: string; const CFilter = string( 'All Files (*.*)|*.*|'+ 'All internal Image types|*.gif;*.jpg;*.jpeg;*.png;*.bmp;*.ico;*.emf;*.wmf;*.tif;*.tiff|'+ 'GIF Images|*.gif|'+ 'JPEG Images|*.jpg;*.jpeg|'+ 'Portable Network Graphics|*.png|'+ 'Bitmaps|*.bmp|'+ 'Icons|*.ico|'+ 'Enhanced Metafiles|*.emf|'+ 'Metafiles|*.wmf|'+ 'TIFF Images|*.tif;*.tiff' ); var dlg: TOpenDialog; begin Result := ''; dlg := TOpenDialog.Create(Self); try dlg.Options := [ofReadOnly, ofPathMustExist, ofFileMustExist, ofShareAware, ofNoTestFileCreate, ofNoDereferenceLinks, ofEnableSizing, ofDontAddToRecent, ofForceShowHidden]; dlg.Filter := CFilter; dlg.FilterIndex := 2; dlg.Title := 'Select a valid image file.'; if dlg.Execute(Self.Handle) then Result := dlg.FileName; finally dlg.Free; end; end; procedure TfrmMain.ImgAClick(Sender: TObject); var s: string; begin s := GetImageFilename; try ImgA.Picture.WICImage.LoadFromFile(s); ImgA.Repaint; except ImgA.Picture.WICImage.LoadFromResourceName(HInstance, 'DefaultImage'); ImgA.Repaint; s := ''; end; if (s <> '') then lblFileA.Caption := s else lblFileA.Caption := FileAText; lblFileA.Hint := lblFileA.Caption; end; procedure TfrmMain.ImgBClick(Sender: TObject); var s: string; begin s := GetImageFilename; try ImgB.Picture.WICImage.LoadFromFile(s); ImgB.Repaint; except ImgB.Picture.WICImage.LoadFromResourceName(HInstance, 'DefaultImage'); ImgB.Repaint; s := ''; end; if (s <> '') then lblFileB.Caption := s else lblFileB.Caption := FileBText; lblFileB.Hint := lblFileB.Caption; end; procedure TfrmMain.ResetForms; begin FFormA.Position := poDesigned; FFormB.Position := poDesigned; FFormA.Top := 0; FFormB.Top := 0; FFormA.Width := 800; FFormA.Height := 800; FFormB.Width := 800; FFormB.Height := 800; FTrackBarA.Position := 255; FTrackBarB.Position := 255; FFormA.Position := poScreenCenter; FFormB.Position := poScreenCenter; end; procedure TfrmMain.btnGoClick(Sender: TObject); begin if FFormA.Visible then FFormA.Visible := False; if FFormB.Visible then FFormB.Visible := False; if (not FileExists(lblFileA.Caption)) then ImgAClick(Sender); FFileA := lblFileA.Caption; if (not FileExists(FFileA)) then begin lblFileA.Caption := FileError; lblFileA.Hint := FFileA; Exit; end; if (not FileExists(lblFileB.Caption)) then ImgBClick(Sender); FFileB := lblFileB.Caption; if (not FileExists(FFileB)) then begin lblFileB.Caption := FileError; lblFileB.Hint := FFileB; Exit; end; try FImageA.Picture.WICImage.Assign(ImgA.Picture.WICImage); except lblFileA.Caption := FileError; lblFileA.Hint := FFileA; Exit; end; try FImageB.Picture.WICImage.Assign(ImgB.Picture.WICImage); except lblFileB.Caption := FileError; lblFileB.Hint := FFileB; Exit; end; FImageA.Repaint; FImageB.Repaint; if (UpperCase(ExtractFilePath(FFileA)) = UpperCase(ExtractFilePath(FFileB))) then begin FFormA.Caption := ExtractFileName(FFileA); FFormB.Caption := ExtractFileName(FFileB); end else begin FFormA.Caption := FFileA; FFormB.Caption := FFileB; end; if cbReset.Checked then ResetForms; FFormA.Visible := True; FFormB.Visible := True; end; end. |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Ich sehe, Du bist ein echter Perfektionist! :thumb: :-D
Grüße, Andreas |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Zwei Bilder transparent übereinander malen ... warum malt man dann nicht, sondern nimmt Forms?
Klar, wenn ich jemanden aus meiner Stadt treffen will, könnte ich auch nach Russland und dann schweben wir zusammen in 400km Höhe in der ISS übereinander. :coder2: ![]() ![]() ![]() Rate-Runde : Wer sieht zuerst, was im Beispiel der Hilfe falsch ist? pssst: https://quality.embarcadero.com/browse/RSP-39576 |
AW: Gescanntes Bild transparent machen – Grafikprogramm gesucht
Zitat:
Es muss eine Möglichkeit geben das "überlappte" anzupassen wie es in der bereitgestellten Datei von Andreas ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 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