texmacs-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Texmacs-dev] slow images..... and slight improvement hack


From: Michael Lachmann
Subject: [Texmacs-dev] slow images..... and slight improvement hack
Date: Tue, 2 Aug 2011 16:59:09 +0200

Hi,

I think that everybody will agree that image rendering in TeXmacs is currently 
quite broken.

If I understand correctly, an imported image is first converted to eps. (I 
think using the scheme conversion methods). Then, when the image is displayed, 

src/Plugins/Ghostscript/gs_utilities.cpp

Is called, which is hard coded to use gs with certain parameters. Then, when 
the file is exported, the image is again converted, if necessary. I think 
TeXmacs should keep the image in the original format, and render it from there. 
On printing it might be converted, or not. And, I think that image rendering 
should be done in the background so that TeXmacs does not get stuck every time 
an image is displayed....

As a temporary remedy, I added a hack...

First of all, calling gs is not hard coded in TeXmacs. Instead an external 
script is called. (hard coded in my version ;)

Since we use an external script, we can try different things... maybe use gs 
correctly, or some such.

The script I ended up using simply calls gs exactly like TeXmacs originally 
did, except that it caches images. So if an image is rendered once in a certain 
resolution, the cached version is used, instead. The cache uses 
~/.imagecache/[CRC32 of image]/img_404x449_90x90.png

Where 404x449_90x90 are the requested resolutions of the image.

For now, it works nicely for me. Sadly, there isn't really a facility to redraw 
an image when something goes wrong, so you might have to erase ~/.imagecache

This whole thing is a horrible hack. But since I work with images that take 20 
seconds or more to render (just a simple 50x100 density plot from R, nothing 
fancy), and a document will have many of those, scrolling through the document 
was really maddening.

Anyway, here is the script and the edits.

The edit to src/Plugins/Ghostscript/gs_utilities.cpp is to replace gs_to_png 
with:
----
void
gs_to_png (url image, url png, int w, int h) {
#if defined (__MINGW__) || defined (__MINGW32__)
  string cmd= "\"";
  cmd << get_env ("TEXMACS_PATH") << string ("\\bin\\gswin32c\" ");
#else
  string cmd= "/usr/local/bin/ps_to_png ";
#endif
  cmd << " " << as_string (w) << " " << as_string (h) << " ";
  int bbw, bbh;
  int rw, rh;
  gs_image_size (image, bbw, bbh);
  rw= (w*72-1)/bbw+1;
  rh= (h*72-1)/bbh+1;
  cmd << " " << as_string (rw) << " " << as_string (rh) << " ";  
  cmd << " " << sys_concretize (png) << " ";
  cmd << sys_concretize (image);
  system (cmd);
}
----

What do you think?

Michael

Attachment: ps_to_png
Description: Binary data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]