deke@valhalla.ee.rochester.edu (05/12/89)
I've just started to use X (X11R3) on SUN workstations. Previously I had
been using 'suntools' and had fiddled with NeWS and X a bit.
I'd like to be able to use some of the classier icons I've collected and
had been using with suntools. As a first pass, I just pulled out the
sunview icon header, put in my notion of a reasonable X icon header, and
used 'bitmap' to display the icon image. It looked almost right... but
not quite. It was as though each of the objects were mirror imaged, but
were correctly placed relative to eachother. Additionally, some of the
borders seemed out of place.
Here is the sunview version
/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
*/
[bitmap here]
And here is what I replaced it with for X
#define Notes_width 64
#define Notes_height 64
static short Notes_bits[] = {
[bitmap here]
}
Now for the question: Is there a known way to do whatever bitmap translation
is necessary here? Have I missed the obvious?
Thanks in advance
^Deke Kassabian, deke@ee.rochester.edu or ...!rochester!ur-valhalla!deke
University of Rochester, Department of Electrical Engineering
Work: +1 716-275-3106 Home: +1 716-328-5676
mikeo@sae.UUCP (Mike Ovington Overhead) (05/12/89)
Take a look at contrib/clients/pbm of the X11R3 distribution. It contains a set of routines for converting to and from a portable bitmap format developed by Jef Poskanzer. You can convert the Sun icon to the portable bitmap and then from the portable bitmap to X11 bitmap format. It supports a number of other formats as well (macpaint, GIF, Sun raster etc.) It also contains a number of utilities for manipulating bitmaps as well. (Cut and Paste, inverting, flipping). I've found it very useful. Michael S. Ovington Software Architecture & Engineering 1600 Wilson Boulavard, Suite 500 Arlington, VA 22209 (703) 276-7910
d87-jse@nada.kth.se (Joakim Sernbrant) (05/12/89)
In article <2194@valhalla.ee.rochester.edu> deke@ee.rochester.edu (Dikran Kassabian) writes: > >I'd like to be able to use some of the classier icons I've collected and >had been using with suntools. As a first pass, I just pulled out the >sunview icon header, put in my notion of a reasonable X icon header, and >used 'bitmap' to display the icon image. It looked almost right... but >not quite. It was as though each of the objects were mirror imaged, but >were correctly placed relative to eachother. Additionally, some of the >borders seemed out of place. > The problem is that the bits are stored from left to right in one format and right to left in the other (can't remember which) ... Here is a quick hack I did to convert bitmaps from Sun to X (use it any way you like) : --------- CUT HERE ---------- /* s u n t o x b m . c Convert Sun icons to X bitmaps. usage: suntoxbm < file.icon > file.xbm */ #include <ctype.h> main(argc, argv) int argc; char **argv; { char c, s[100], *name = argv[1]; int w, h, x, n; scanf("%*s%*s%*[^=]%*c%d%*[^=]%*c%d%*s%*s%*s%*s", &w, &h); printf("#define %s_width %d\n", name, w); printf("#define %s_height %d\n", name, w); printf("static char %s_bits[] = {\n"); n = 0; printf(" "); while ((c = getchar()) != -1) { if (c == 'x') { x = gethex(); if (n == 12 ) { printf(",\n "); n = 0; } else if (n) printf(", "); printf("0x%02x, ", reverse((x & 0xff00) >> 8)); printf("0x%02x", reverse(x & 0xff)); n += 2; } } printf("};\n"); } int reverse(x) int x; { int i, y = 0; for (i = 0; i < 8; i++) { y <<= 1; y |= ((x & 1) == 1); x >>= 1; } return y; } int gethex() { int i, c, x = 0; for (i=0; i < 4; i++) { x <<= 4; c = getchar(); if (isupper(c)) c = tolower(c); if (c >= 'a') x += c - 'a' + 10; else x += c - '0'; } return x; } -- -- Joakim Sernbrant, Royal Institute of Technology, Stockholm, Sweden -- Internet: d87-jse@nada.kth.se --
envbvs@epb2.lbl.gov (Brian V. Smith) (05/12/89)
In article <1014@draken.nada.kth.se>, d87-jse@nada.kth.se (Joakim Sernbrant) writes: > In article <2194@valhalla.ee.rochester.edu> deke@ee.rochester.edu (Dikran Kassabian) writes: > > > >I'd like to be able to use some of the classier icons I've collected and > >had been using with suntools. As a first pass, I just pulled out the > >sunview icon header, put in my notion of a reasonable X icon header, and > >used 'bitmap' to display the icon image. It looked almost right... but > >not quite. It was as though each of the objects were mirror imaged, but > >were correctly placed relative to eachother. Additionally, some of the > >borders seemed out of place. > > > > The problem is that the bits are stored from left to right in one > format and right to left in the other (can't remember which) ... > > Here is a quick hack I did to convert bitmaps from Sun to X (use > it any way you like) : > [program follows] Instead of the reverse() procedure provided, here is a much faster way to reverse bits in a byte: unsigned char reverse_byte[256] = { 0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0, 0x10,0x90,0x50,0xd0,0x30,0xb0,0x70,0xf0, 0x08,0x88,0x48,0xc8,0x28,0xa8,0x68,0xe8, 0x18,0x98,0x58,0xd8,0x38,0xb8,0x78,0xf8, 0x04,0x84,0x44,0xc4,0x24,0xa4,0x64,0xe4, 0x14,0x94,0x54,0xd4,0x34,0xb4,0x74,0xf4, 0x0c,0x8c,0x4c,0xcc,0x2c,0xac,0x6c,0xec, 0x1c,0x9c,0x5c,0xdc,0x3c,0xbc,0x7c,0xfc, 0x02,0x82,0x42,0xc2,0x22,0xa2,0x62,0xe2, 0x12,0x92,0x52,0xd2,0x32,0xb2,0x72,0xf2, 0x0a,0x8a,0x4a,0xca,0x2a,0xaa,0x6a,0xea, 0x1a,0x9a,0x5a,0xda,0x3a,0xba,0x7a,0xfa, 0x06,0x86,0x46,0xc6,0x26,0xa6,0x66,0xe6, 0x16,0x96,0x56,0xd6,0x36,0xb6,0x76,0xf6, 0x0e,0x8e,0x4e,0xce,0x2e,0xae,0x6e,0xee, 0x1e,0x9e,0x5e,0xde,0x3e,0xbe,0x7e,0xfe, 0x01,0x81,0x41,0xc1,0x21,0xa1,0x61,0xe1, 0x11,0x91,0x51,0xd1,0x31,0xb1,0x71,0xf1, 0x09,0x89,0x49,0xc9,0x29,0xa9,0x69,0xe9, 0x19,0x99,0x59,0xd9,0x39,0xb9,0x79,0xf9, 0x05,0x85,0x45,0xc5,0x25,0xa5,0x65,0xe5, 0x15,0x95,0x55,0xd5,0x35,0xb5,0x75,0xf5, 0x0d,0x8d,0x4d,0xcd,0x2d,0xad,0x6d,0xed, 0x1d,0x9d,0x5d,0xdd,0x3d,0xbd,0x7d,0xfd, 0x03,0x83,0x43,0xc3,0x23,0xa3,0x63,0xe3, 0x13,0x93,0x53,0xd3,0x33,0xb3,0x73,0xf3, 0x0b,0x8b,0x4b,0xcb,0x2b,0xab,0x6b,0xeb, 0x1b,0x9b,0x5b,0xdb,0x3b,0xbb,0x7b,0xfb, 0x07,0x87,0x47,0xc7,0x27,0xa7,0x67,0xe7, 0x17,0x97,0x57,0xd7,0x37,0xb7,0x77,0xf7, 0x0f,0x8f,0x4f,0xcf,0x2f,0xaf,0x6f,0xef, 0x1f,0x9f,0x5f,0xdf,0x3f,0xbf,0x7f,0xff }; Just use the array values. e.g. reverse(x) = reverse_byte[x]; _____________________________________ Brian V. Smith (bvsmith@lbl.gov) Lawrence Berkeley Laboratory We don't need no signatures!
jef@ace.ee.lbl.gov (Jef Poskanzer) (05/13/89)
In the referenced message, d87-jse@nada.kth.se (Joakim Sernbrant) wrote: }In article <2194@valhalla.ee.rochester.edu> deke@ee.rochester.edu (Dikran Kassabian) writes: }>[how to convert icons to X bitmaps?] } s u n t o x b m . c About three years ago an equivalent program became the nucleus of the PBM package when I split it into the icontopbm and pbmtoxbm programs that you can now find in your X source tree. --- Jef Jef Poskanzer jef@helios.ee.lbl.gov ...well!pokey Substantial penalty for early withdrawal.