jpeg viewer 2

jpeg viewer 2

am 31.05.2006 09:56:47 von Gerhard Wolf

Hallo,

folgendes script erfüllt fast meine Forstellungen.
Jetzt muss das Bild nur noch um einen Faktor (x) kleiner
dargestellt werden, um komplett angezeigt zu werden.
Dafür habe ich jedoch keine Methode gefunden.
Ähnlich >$foto->copy($foto, -subsample => 2,2); # verkleinert aber nur
den sichtbaren Bereich und nicht das ganze Bild.

Wie geht das?

------------------------------------------------------------ ---
use strict;
use warnings;
#use diagnostics;
use Data::Dumper();
#print Data::Dumper::Dumper();
use Tk;
use Tk::JPEG;
use Tk::PNG;
my $gdir = 'D:/fotos/';
my @fotos = qw(CIMG4851.JPG CIMG4853.JPG CIMG4854.JPG CIMG4855.JPG
CIMG4856.JPG CIMG4857.JPG);

my $mw = MainWindow->new(-width=>1280, -height=>1024);
$mw->packPropagate(0);
my $cnt = 0;
my $foto = $mw->Photo('IMG', -width => 1280, -height => 1024, -file =>
$gdir.$fotos[$cnt]);
$foto->copy($foto, -subsample => 4,4);
my $f = $mw->Label(-image=>$foto);

$f->repeat(2000, sub{ $cnt = setCnt($cnt);
$foto->blank();
$foto->configure(-file => $gdir.$fotos[$cnt]);
$foto->copy($foto, -subsample => 3,3);
$f->update();
});

$f->pack(-anchor=>'nw');

MainLoop;

sub setCnt {
my $cnt = shift;
if( $cnt < scalar(@fotos)-1 ){ $cnt++;
}else{ undef $cnt;
$cnt = 0;
} return $cnt;
}

------------------------------------------------------------ ---

Re: jpeg viewer 2

am 01.06.2006 02:49:32 von Slaven Rezic

Gerhard Wolf writes:

> Hallo,
>
> folgendes script erfüllt fast meine Forstellungen.
> Jetzt muss das Bild nur noch um einen Faktor (x) kleiner
> dargestellt werden, um komplett angezeigt zu werden.

Ist x ein Integer oder ein Float? Wenn es ein Float ist, dann geht das
mit reinen Tk-Mitteln nicht. Du musst ein anderes Modul zu Hilfe
nehmen, z.B. GD, Imager oder Image::Magick.

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de

Start a WWW browser - OS independent:
http://user.cs.tu-berlin.de/~eserte/src/perl/WWWBrowser/

Re: jpeg viewer 2

am 01.06.2006 06:40:21 von Gerhard Wolf

Slaven Rezic schrieb:
> Gerhard Wolf writes:
>
>> Hallo,
>>
>> folgendes script erfüllt fast meine Forstellungen.
>> Jetzt muss das Bild nur noch um einen Faktor (x) kleiner
>> dargestellt werden, um komplett angezeigt zu werden.
>
> Ist x ein Integer oder ein Float? Wenn es ein Float ist, dann geht das
> mit reinen Tk-Mitteln nicht. Du musst ein anderes Modul zu Hilfe
> nehmen, z.B. GD, Imager oder Image::Magick.
>
> Gruß,
> Slaven
>
Wenn x ein Integer ist bin ich auch glücklich!
Fällt dir dazu denn was ein?

Re: jpeg viewer 2

am 01.06.2006 22:28:05 von Slaven Rezic

Gerhard Wolf writes:

> Hallo,
>
> folgendes script erfüllt fast meine Forstellungen.
> Jetzt muss das Bild nur noch um einen Faktor (x) kleiner
> dargestellt werden, um komplett angezeigt zu werden.
> Dafür habe ich jedoch keine Methode gefunden.
> Ähnlich >$foto->copy($foto, -subsample => 2,2); # verkleinert aber nur
> den sichtbaren Bereich und nicht das ganze Bild.
>

Mach daraus:

$smallfoto = $mw->Photo; # evtl width/height anhand $foto setzen
$smallfoto->copy($foto, -subsample => $x,$x);

Und wenn du ein Tk::Photo wiederverwenden willst, brauchst du
vielleicht einen Aufruf von blank() zwischendurch.

--
Slaven Rezic - slaven rezic de
Tired of using file selectors? Real programmers use the TAB key for
completion and not for jumping around. Try
http://search.cpan.org/search?mode=module&query=Tk::PathEntr y

Re: jpeg viewer 2

am 02.06.2006 10:11:51 von Gerhard Wolf

Slaven Rezic schrieb:
> Gerhard Wolf writes:
>
>> Hallo,
>>
>> folgendes script erfüllt fast meine Forstellungen.
>> Jetzt muss das Bild nur noch um einen Faktor (x) kleiner
>> dargestellt werden, um komplett angezeigt zu werden.
>> Dafür habe ich jedoch keine Methode gefunden.
>> Ähnlich >$foto->copy($foto, -subsample => 2,2); # verkleinert aber nur
>> den sichtbaren Bereich und nicht das ganze Bild.
>>
>
> Mach daraus:
>
> $smallfoto = $mw->Photo; # evtl width/height anhand $foto setzen
> $smallfoto->copy($foto, -subsample => $x,$x);
>
> Und wenn du ein Tk::Photo wiederverwenden willst, brauchst du
> vielleicht einen Aufruf von blank() zwischendurch.
>
Danke. Ich habe meinen Viewer mittlerweile soweit, dass er alle Bilder
auf Bildschirmgröße trimmt und auch in der Performance gut läuft. Jetzt
muss ich eben nur noch ein paar Kleinigkeiten anpassen.