Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Bild aus Clipboard automatisch bearbeiten und zurückspeicher

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Henry88



Anmeldungsdatum: 27.12.2011
Beiträge: 2

BeitragVerfasst am: 27.12.2011, 00:38    Titel: Bild aus Clipboard automatisch bearbeiten und zurückspeicher Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 27.12.2011, 03:53    Titel: Antworten mit Zitat

wie viel zeit das braucht hängt davon ab wie blöd du deinen filter umsetzt happy 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
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 27.12.2011, 19:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Henry88



Anmeldungsdatum: 27.12.2011
Beiträge: 2

BeitragVerfasst am: 28.12.2011, 01:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz