Thread Photo Objekt in Image Objekt konvertieren
(6 answers)
Opened by Kean at 2015-01-16 14:18
Ich nutze das Modul Win32::Printer für ausdrucke. Bei diesem Modul kann man Bilder von der Festplatte einlesen und ausdrucken lassen.
Das geht so: Code (perl): (dl
)
$dc->Image('briefpapier.png', 0, 0); Jetzt will ich die Datei nicht in einem Verzeichnis liegen haben, sondern in ein Package mit weiteren Bildern ablegen. Dies mache ich für Buttons etc. bereits erfolgeich so: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # Umwandeln einer Grafik in einen String open MYFILE, 'bild.png' or die "Cannot open file: $!"; binmode MYFILE; my $rawdata; while (<MYFILE>) { $rawdata .= $_; } close MYFILE; my $bildstring = encode_base64($rawdata); # Diesen String als Bild verwenden: $mw->Photo( -data => $bildstring ); Ich kann also die Daten als Photo Objekt nutzen. Win32::Printer nutzt anscheinend ein Image Objekt. Dies schließe ich aus folgender Funktion: Code (perl): (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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 sub Image { my $self = shift; if (($#_ != 0) and ($#_ != 2) and ($#_ != 4)) { _croak "ERROR: Wrong number of parameters!\n"; return undef; } my ($width, $height) = (0, 0); if (($#_ == 2) or ($#_ == 4)) { my ($fileorref, $x, $y, $w, $h) = @_; if (!_IsNo($fileorref)) { $fileorref = $self->Image($fileorref); unless (defined($fileorref)) { return undef; } } _GetEnhSize($self->{dc}, $fileorref, $width, $height, $self->{unit}); $width = $self->_xp2un($width); $height = $self->_yp2un($height); if ((!defined($w)) or ($w == 0)) { $w = $width; } if ((!defined($h)) or ($h == 0)) { $h = $height; } unless (_PlayEnhMetaFile($self->{dc}, $fileorref, $self->_xun2p($x), $self->_yun2p($y), $self->_xun2p($x + $w), $self->_yun2p($y + $h))) { _croak "ERROR: Cannot display metafile! ${\_GetLastError()}"; return undef; } return wantarray ? ($fileorref, $width, $height) : $fileorref; } else { my $file = shift; if (_IsNo($file)) { _GetEnhSize($self->{dc}, $file, $width, $height, $self->{unit}); $width = $self->_xp2un($width); $height = $self->_yp2un($height); return ($width, $height); } if (defined($self->{imagef}->{$file})) { _GetEnhSize($self->{dc}, $self->{imagef}->{$file}, $width, $height, $self->{unit}); $width = $self->_xp2un($width); $height = $self->_yp2un($height); return wantarray ? ($self->{imagef}->{$file}, $width, $height) : $self->{imagef}->{$file}; } my $fref; if ($file =~ /.emf$/) { $fref = _GetEnhMetaFile($file); unless ($fref) { _croak "ERROR: Cannot load metafile! ${\_GetLastError()}"; return undef; } } elsif ($file =~ /.wmf$/) { $fref = _GetWinMetaFile($self->{dc}, $file); unless ($fref) { _croak "ERROR: Cannot load metafile! ${\_GetLastError()}"; return undef; } } else { $fref = _LoadBitmap($self->{dc}, $file, -1, $self->{unit}); unless ($fref) { _croak "ERROR: Cannot load bitmap! ${\_GetLastError()}"; return undef; } } $self->{imager}->{$fref} = $file; $self->{imagef}->{$file} = $fref; _GetEnhSize($self->{dc}, $fref, $width, $height, $self->{unit}); $width = $self->_xp2un($width); $height = $self->_yp2un($height); return wantarray ? ($fref, $width, $height) : $fref; } } Kann ich ein Photo Objekt in ein Image Objekt irgendwie konvertieren oder vielleicht schon den $bildstring (welchen ich in einem Modul speichere und abrufe) kovertiere dass Image ihn aktzeptiert? Wenn ich versuche der Image Funktion von Win32::Printer $bildstring zu übergeben, kommt momentan folgende Fehlermeldung: Code: (dl
)
1 Tk::Error: ERROR: Cannot load bitmap! Fehler beim Einlagern einer Speicherseite. |