 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Henry88
Anmeldungsdatum: 27.12.2011 Beiträge: 2
|
Verfasst am: 27.12.2011, 00:38 Titel: Bild aus Clipboard automatisch bearbeiten und zurückspeicher |
|
|
Hallo zusammen,
ich möchte in Freebasic die Zwischenablage überwachen, wenn dort von einer anderen Anwendung
ein neues Bild abgelegt wurde, soll Freebasic es automatich holen, eine von mir bestimmte
Operation an dem Bild durchführen, und sofort wieder in die Zwischenablage speichern.
Das Code-Beispiel 'Zwischenablage lesen und schreiben 2 (Bilder)' ist möglicherweise
der Schlüssel zum Erfolg, wenn ich als vielleicht fortgeschrittener Anfänger das Beispiel
verstehen würde und wüßte, wie ich dort ansetzen kann. Es handelt sich um normale Digitalfotos
in der heutigen Größe mit 8bit. Ich möchte dafür meine eigenen Effektfilter bauen. Wieviel Zeit würde
Freebasic ungefähr brauchen, um beispielsweise 14 Mio Pixel auszulesen, analysieren, teilweise
ändern und zurück zu schreiben?
Gibt es bessere Ideen, Vorschläge, Hinweise, Codebeispiele? Ich sehe vor lauter Bäumen den Wald irgendwie nicht...
Danke im voraus.
viele Grüße
Henry |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 27.12.2011, 03:53 Titel: |
|
|
wie viel zeit das braucht hängt davon ab wie blöd du deinen filter umsetzt je mehr du falsch/schlecht machst und je komplexer die operationen die der filter durchführen soll, um so länger wirds dauern. Laufzeit hängt primär erstmal von der Qualität der Implementierung ab, nicht von der verwendeten Programmiersprache. Erst bei wirklich performance-kritischen dingen wie komplexen echtzeitsimulationen musst du dich ggf auf C/C++ einlassen weil das nach wie vor den schnellsten code produziert. Aber für ne bildbearbeitung ist das nicht so wichtig, da wird die laufzeitkomplexität der algorithmen den größeren effekt haben.
bessere idee: benutz irgendeine vernünftige programmiersprache, Java oder C++ zB. Da findest du unter anderem: (vermutlich mehrere,) funktionierende Codebeispiele für bilder in und aus der zwischenablage holen, benutzbare fertige bibliotheken um vernünftig auf den bildern per code rumzumalen, ggf. komplett fertige bibliotheken mit standard bildoperationen wie weich/scharfzeichnen oder anderen lustigen effekten und so weiter und so weiter.
und noch so ne andere idee: Warum willst du auf der zwischenablage arbeiten? ist es nicht einfacher, wenn du das ganze als einfaches konsolen-tool schreibst und dann im explorer-rechtsklick-menü unterbringst oder aus anderen scripts raus gezielt für mehrere dateien auf einmal aufrufen kannst statt immer jedes bild einzeln von hand durch die zwischenablage zu schieben? _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 27.12.2011, 19:46 Titel: |
|
|
Ganz so einfach ist dein Vorhaben nicht, jedoch sicherlich mit einigen Recherchen für dich durchführbar. Windows-Grundlagenwissen wie etwa die Nachrichtenschleife, Subclassing, GDI Grundlagen für die Grafik, usw. wären allerdings sicher nötig und musst du dir ggf. aneignen, wenn du dich damit noch nicht so auskennst. die verwendung der Zwischenablage selbst ist in der MSDN Library dokumentiert: http://msdn.microsoft.com/en-us/library/ms648709%28v=VS.85%29.aspx
Wie MisterD erwähnte ist es allerdings in anderen Programmiersprachen als FreeBasic bzw. C möglicherweise einfacher, da es fertige Bibliotheken gibt, die z.B. den Zugriff auf die Zwischenablage wesentlich vereinfachen. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
Henry88
Anmeldungsdatum: 27.12.2011 Beiträge: 2
|
Verfasst am: 28.12.2011, 01:57 Titel: |
|
|
Hallo nochmal,
Folgende Schritte soll FreeBasic ausführen:
1. Start über WSH-Script vom Bildbearbeitungsprogramm aus
2. get clip () ' Inhalt aus dem Clipboard holen
3. prüfen ob gültiges Bild
4. die Bildmaße holen (x, Y)
5. die ersten 3 Pixel der 1. Spalte des Bildes lesen (dort steht codiert die Anweisung, was FB mit dem Bild machen soll)
6. geschachtelte Schleife :
for y = 1 to hoehe
for x = 1 to breite
getpixel(x,y) + neu berechnen + setpixel(x+Versatz,y,Wert)
next x,y
7. Set clip ()
Zum besseren Verständnis: Obiger Ablauf bezieht sich auf 3 nebeneinanderliegende Bilder, 1 x Quellbild, einmal Maske, einmal Zielbild.
Das ist für das aufrufende Script die einfachste Möglichkeit, und damit müssen auch nicht mehrere Bilder nacheinander übergeben werden.
Ich möchte im ersten Anlauf vom Quellbild unter Berücksichtigung der Maske Teile des Bildes in das 2. Bild einblenden.
Jedoch müßte FB mit Bildbreiten von 15000 bis 20000 Pixeln klar kommen. Ob innerhalb von FB nun die 3 Bilder nebeneinader verbleiben,
oder ob der Inhalt in Arrays zur weiteren Bearbeitung eingelesen wird, ist mir egal. Es muß mindestens 1 Bild zurück ins clipboard,
es dürfen aber auch alle 3 wieder zurück kommen.
FB soll keine GUI haben, keine Eingabe, keine Konsole, soll also nicht sichtbar sein. Das aufrufende Script läuft mit einer Vorschau.
Dort sind die Bilder etwa 400.000 Pixel groß. Wenn ein Parameter über einen Slider verändert wird, dann erfolgt in einer laufenden
Schleife eine Aktualisierung der Vorschau, d. h. die Zwischenablage wird bei einer Reglerbewegung vielleicht 10 x beschrieben, und
jeweils soll FB die Datei abholen, umrechnen und zurückschreiben. Diese Arbeit dauert in dem Script etwa 2 Sekunden für die Vorschau.
Und hier erhoffe ich mir einen schnellere Bearbeitung in FB. Wenn in der Vorschau alle Bearbeitungsschritte am Bild erfolgt sind,
dann kommt der Echtlauf, bei dem das Originalbild mit vielleicht 12 bis 24 Megapixel (* 3) ins Clipboard geschickt wird. Dort könnte ich
dann in den ersten 3 Pixeln die Argumente für 'Ende' mitschicken, so dass FB sich nach dessen Ausführung beendet.
Ich hoffe, das ist einigermaßen verständlich. Zunächst würde ich gern überhaupt diesen Weg schaffen. Danach kümmere ich mich dann
(mit Eurer Hilfe) um die optimierung des Codes für einen schnelleren Ablauf.
Beim Stöbern durch Euer (sehr ansprechendes) Portal/Forum stieß ich auf die oben erwähnte Routine, die den Datenaustausch über
das Clipboard ermöglichen könnte. Danke übrigens für die Antworten, vielleicht könnt Ihr das noch mal dem neuen Input durchlaufen
lassen?
Viele Grüße
Henry |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|