TkPhotoImage :data=>buf


(Ara.T.Howard) #1

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:ininitialize’
from /dmsp/reference/lib/ruby/1.8/tkcanvas.rb:926:in initialize' from (irb):11:innew’
from (irb):11

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

···

from :0

===============================================================================

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
===============================================================================


(Hidetoshi NAGAI) #2

Hi,

···

From: “Ara.T.Howard” Ara.T.Howard@noaa.gov
Subject: TkPhotoImage :data=>buf
Date: Sun, 22 Feb 2004 02:44:51 +0900
Message-ID: Pine.LNX.4.44.0402211035300.27847-100000@fattire.ngdc.noaa.gov

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.

                              Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)

(Ara.T.Howard) #3

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

···

On Tue, 24 Feb 2004, Hidetoshi NAGAI wrote:

Hi,

From: “Ara.T.Howard” Ara.T.Howard@noaa.gov
Subject: TkPhotoImage :data=>buf
Date: Sun, 22 Feb 2004 02:44:51 +0900
Message-ID: Pine.LNX.4.44.0402211035300.27847-100000@fattire.ngdc.noaa.gov

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.

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
===============================================================================