Schrift
[thread]5060[/thread]

Grafikprogramm in Perl

Leser: 1


<< >> 9 Einträge, 1 Seite
[E|B]
 2005-08-21 23:33
#44399 #44399
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Hallo,
ich bin gerade dabei ein kleines Grafikprogramm zum Spaß mit Tk zu programmieren. Jetzt stellt sich mir eine grundsätzliche Frage: Wie sollte man am besten das Öffnen und Bearbeiten von Grafiken managen?
Beispiel: Angenommen man öffnet eine Grafik. Nun soll es etwa möglich sein Linien in die Grafik einzufügen und das neue Bild abzuspeichern. Das Problem ist jetzt nur, wie ich das kombiniere. Nehmen wir an ich erstelle eine Canvas Oberfläche, auf der ich das unveränderte Bild positioniere. Nun fügt der Benutzer eine Linie in das Bild ein. Soweit kein Problem. Wie soll aber nun das neue Bild gespeichert werden? Ich habe zwar dann die veränderte Canvas Oberfläche, aber ja noch kein GIF oder JPEG! Wie bekommt man das unter einen Hut? Hat jemand eine Idee?
Danke!
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Crian
 2005-08-22 13:05
#44400 #44400
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Du kannst mit der Methode postscript eine Postscript-Datei erstellen und die dann geeignet konvertieren.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
[E|B]
 2005-08-22 14:14
#44401 #44401
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Ich glaub das wird wohl das beste sein. Sehe auch anders keine geeignete Möglichkeit.
Danke!
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Strat
 2005-08-22 14:52
#44402 #44402
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
gibt es eigentlich eine einfache moeglichkeit, postscripts wieder in einen canvas reinzubringen?

ich wuerde als zwischenformat was eigenes benuetzen, wo die aktionen, die zum erstellen der grafik gemacht wurden, der reihe nach gespeichert sind (oder kann man den Canvas auch mit Storable serialisieren und dann wiederherstellen?), und falls jpeg oder aehnliches gewuenscht ist, die aktionen auf GD oder Image::Magick uebertragen und ausfuehren...\n\n

<!--EDIT|Strat|1124707986-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
[E|B]
 2005-08-23 01:06
#44403 #44403
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Hab noch ein kleines Problem:
1. Ich habe ein Text-Widget erzeugt:

Code: (dl )
$mw->Text->pack(-side => 'top', -anchor => 'n', -expand => 1, -fill => 'both');


Das Problem ist nun, dass das Widget nicht bis zum obersten Rand hin ('y') ausgefüllt wird, sondern immer nur auf seiner Standartgröße von 24 Zeilen bleibt. Erst wenn ich eine fixe Höhe eingebe vergrößert es sich. Was kann da falsch laufen?

2. Wieso kann ich mit dem folgenden Snippet in der Textarea nicht horizontal scrollen??

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use Tk;

$mw = MainWindow->new();
$frame = $mw->Frame();
$scrollx = $frame->Scrollbar(-orient => 'horizontal');
$scrolly = $frame->Scrollbar();
$text = $frame->Text(-xscrollcommand => ['set' => $scrollx], -yscrollcommand => ['set' => $scrolly]);

$scrollx->configure(-command => ['xview' => $text]);
$scrolly->configure(-command => ['yview' => $text]);
$scrollx->pack(-side => 'bottom', -fill => 'x');
$scrolly->pack(-side => 'right', -fill => 'y');
$text->pack(-side => 'top', -expand => 1, -fill => 'both');

MainLoop;
\n\n

<!--EDIT|[E|B]|1124748700-->
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Crian
 2005-08-23 12:41
#44404 #44404
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
bequem:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/perl
use strict;
use warnings;

use Tk;
use Tk::ROText;

tk_start();
exit;


sub tk_start {
my $mw = new MainWindow;

my $t = $mw->Scrolled(
'ROText',
-scrollbars => 'osoe',
-height => 10,
-width => 50,
-wrap => 'none',
)->pack(
-fill => 'both',
-expand => 1,
);

seek DATA, 0, 0;
while (<DATA>) {
$t->insert('end', $_);
}

MainLoop();
} # sub tk_start

_ _DATA_ _


oder zu Fuß:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/perl
use strict;
use warnings;

use Tk;
use Tk::ROText;

tk_start();
exit;


sub tk_start {
my $mw = new MainWindow;

#
# horizontale und vertikale Rollbalken:
#
my $rollx = $mw->Scrollbar(
-orient => 'horizontal',
)->pack(
-side => 'bottom',
-fill => 'x',
);
my $rolly = $mw->Scrollbar(
)->pack(
-side => 'right',
-fill => 'y',
);

#
# Textwidget:
#
my $text = $mw->ROText(
-height => 10,
-width => 50,
-wrap => 'none',
-xscrollcommand => ['set' => $rollx],
-yscrollcommand => ['set' => $rolly],
)->pack(
-fill => 'both',
-expand => 1,
);

#
# Die Rollbalken an das Textwidget binden:
#
$rollx->configure(-command => ['xview' => $text]);
$rolly->configure(-command => ['yview' => $text]);

#
# Textwidget füllen
#
seek DATA, 0, 0;
while (<DATA>) {
$text->insert('end', $_);
}

MainLoop();
} # sub tk_start

_ _DATA_ _


(Leerzeichen zwischen den Unterstrichen entfernen)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
[E|B]
 2005-08-23 13:23
#44405 #44405
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Den Fehler bei meinem Scrollbar-Widget hab ich nicht gefunden. Ich habe einfach dein Snippet 1:1 übertragen, funktioniert aber jetzt.
Dass das Text-Widget nicht bis zum oberen Rand hin ausgefüllt war, lag am Frame, welches die Option "-expand => 1" gesetzt hatte.
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
ptk
 2005-08-24 17:18
#44406 #44406
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Mit Tk::WinPhoto kann man quasi einen Screenshot machen und das Ergebnis in ein GIF, PNG, JPEG ... speichern.
ptk
 2005-08-24 17:26
#44407 #44407
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=Strat,22.08.2005, 12:52]gibt es eigentlich eine einfache moeglichkeit, postscripts wieder in einen canvas reinzubringen?

ich wuerde als zwischenformat was eigenes benuetzen, wo die aktionen, die zum erstellen der grafik gemacht wurden, der reihe nach gespeichert sind (oder kann man den Canvas auch mit Storable serialisieren und dann wiederherstellen?),
[/quote]
Ein $canvas->dump gibt es zwar nicht, aber ist nicht allzu schwer zu realisieren. In Pseudo-Code:
Code: (dl )
1
2
3
4
5
6
7
for my $id ($canvas->find("all")) {
push @canvas, { type => $canvas->type($id),
coords => [ $canvas->coords($id) ],
config => [ map { ($_->[0], $canvas->itemcget($id, $_->[0])) } $canvas->itemconfigure($id) ],
# evtl. weitere interessante Optionen
};
}

Das Deserialisieren ueberlasse ich als Aufgabe fuer den Leser.
Quote
und falls jpeg oder aehnliches gewuenscht ist, die aktionen auf GD oder Image::Magick uebertragen und ausfuehren...
<< >> 9 Einträge, 1 Seite



View all threads created 2005-08-21 23:33.