TkPhotoImage :data=>buf

A

Ara.T.Howard

does anyone know if this is simply a limitation of the gif formatted images?

irb(main):001:0> TkPhotoImage.new :file=>'images/Back.gif'
=> #<TkPhotoImage:0xb73290ec @type="photo", @path="i00006">

irb(main):002:0> (data=IO.read 'images/Back.gif').size
=> 985

irb(main):003:0> TkPhotoImage.new :data=>data
RuntimeError: couldn't recognize image data
from /dmsp/reference/lib/ruby/1.8/tk.rb:1623:in `__invoke'
from /dmsp/reference/lib/ruby/1.8/tk.rb:1623:in `_invoke'
from /dmsp/reference/lib/ruby/1.8/tk.rb:1027:in `tk_call'
from /dmsp/reference/lib/ruby/1.8/tkcanvas.rb:883:in `initialize'
from /dmsp/reference/lib/ruby/1.8/tkcanvas.rb:926:in `initialize'
from (irb):11:in `new'
from (irb):11
from :0

am i limited to bitmaps for this or should other types of images be able to be
loaded this way?

what i'm trying to do is something like

....

back_img = TkPhotoImage.new :data=>back_gif

BEGIN {
back_gif = '2158asdfanajk350w9ae8asdf....'
}

....

in otherwords i want to inline all my icon images in the script. i can do this
by inlining them, writing out a tempfile, and using that tempfile - but would
like to avoid the extra step...

any suggestions welcome - i'm terrible with tk and have two days to whip out
this gui...

-a
--
===============================================================================
| EMAIL :: Ara [dot] T [dot] Howard [at] noaa [dot] gov
| PHONE :: 303.497.6469
| ADDRESS :: E/GC2 325 Broadway, Boulder, CO 80305-3328
| URL :: http://www.ngdc.noaa.gov/stp/
| TRY :: for l in ruby perl;do $l -e "print \"\x3a\x2d\x29\x0a\"";done
===============================================================================
 
H

Hidetoshi NAGAI

Hi,

From: "Ara.T.Howard" <[email protected]>
Subject: TkPhotoImage :data=>buf
Date: Sun, 22 Feb 2004 02:44:51 +0900
Message-ID: said:
does anyone know if this is simply a limitation of the gif formatted images?

It's a bug. I understand the reason og the trouble.
But it may be a little difficalt to fix.

The bug depends on string interchange between Ruby and
Tk interpreter. To avoid the trouble of the difference
of encoding between the interpreters, current Ruby/Tk
converts encoding of strings automatically. Usually it
will be convenient for Ruby/Tk users. Therefore, when
treats a binary string (especially, includes null bytes),
the data is garbled.

To fix the bug, I'll have to edit tcltklib.c and TkVariable
class, and add a new class "Tk::BinaryString" which is a
subclass of Tk::EncodedString class. A Tk::EncodedString
instance is a string with encoding information. By creating
a Tk::BinaryString instance (has a special encoding 'binary')
for a binary string, Ruby/Tk recognizes that the string
never be converted and never be terminated by a null byte.

Although this strategy may trouble Ruby/Tk users, it will
be an actual and reasonable solution. I think so. Probably
I'll have to change the implementation of TkVariable class.
My only worry is en-bugging by side effects.

Please wait for a good news about this.
It will not be far-off.
 
A

Ara.T.Howard

Hi,

From: "Ara.T.Howard" <[email protected]>
Subject: TkPhotoImage :data=>buf
Date: Sun, 22 Feb 2004 02:44:51 +0900


It's a bug. I understand the reason og the trouble. But it may be a little
difficalt to fix.

The bug depends on string interchange between Ruby and Tk interpreter. To
avoid the trouble of the difference of encoding between the interpreters,
current Ruby/Tk converts encoding of strings automatically. Usually it will
be convenient for Ruby/Tk users. Therefore, when treats a binary string
(especially, includes null bytes), the data is garbled.

To fix the bug, I'll have to edit tcltklib.c and TkVariable class, and add a
new class "Tk::BinaryString" which is a subclass of Tk::EncodedString class.
A Tk::EncodedString instance is a string with encoding information. By
creating a Tk::BinaryString instance (has a special encoding 'binary') for a
binary string, Ruby/Tk recognizes that the string never be converted and
never be terminated by a null byte.

Although this strategy may trouble Ruby/Tk users, it will be an actual and
reasonable solution. I think so. Probably I'll have to change the
implementation of TkVariable class. My only worry is en-bugging by side
effects.

Please wait for a good news about this. It will not be far-off.

thanks for the detailed reply!

if you you introduced the Tk::BinaryString class, and only used it when
':buf=>data' was used - that shouldn't cause any bugs should it?

thanks again.

-a
--
===============================================================================
| EMAIL :: Ara [dot] T [dot] Howard [at] noaa [dot] gov
| PHONE :: 303.497.6469
| ADDRESS :: E/GC2 325 Broadway, Boulder, CO 80305-3328
| URL :: http://www.ngdc.noaa.gov/stp/
| TRY :: for l in ruby perl;do $l -e "print \"\x3a\x2d\x29\x0a\"";done
===============================================================================
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,981
Messages
2,570,187
Members
46,731
Latest member
MarcyGipso

Latest Threads

Top