1. RE: Palettes..GRAPHICS
- Posted by Mike <vulcan at win.co.nz> Oct 11, 2002
- 356 views
Jordah, Before I wrapped the DibDraw functions (in my small Dib functions library)I had looked at using all the usual palette functions as you have. I then realized that things were a whole lot simpler using DibDraw, albeit somewhat slower. Why don't you try using my Dib functions instead? Regards, Mike jordah ferguson wrote: > Hi All, > > Below is a 256 system palette(syspal) my routine creates. The > problem is that i have a 16 Color > Video card. When i attempt to test it, it just gives me a black color > since my display device > cannot output more than 16 colors. I want to create a logical palette > for my draw window > DC but with the GDI functions i have to fill in these bits as RGB > quads,CreatePalette, > then SelectPalette() followed by RealizePalette(). > > The only helpful routine i have coded using the GDI routines to give me > > a palette > is GetSystemPaletteEntries() which only gives me 16 colors as supposed > to. I know i can do this > another way by simply enumerating the graphical solid pens but according > > to my predictions, is that > this method will just simply return to me 16 colors...... > > I know there is a way things can be done and most colors shown on screen > > but how, is the problem > for example i have AHA icon editor that displays all or most of the 256 > colors. So how do they > do it? to they directly do low-level stuff on the Display Card which GDI > > safely doesn't do? Also could some one create a loop either using > SetPixel or any other graphical > functions using the system palette entries i have presented below and > tell me the > output is like... ie sufficient/lucks many other colors. Thanx. > > Jordah Ferguson. > > function RGB(sequence Triad) > return Triad[1] + > Triad[2] * 256 + > Triad[3] * 65536 > -- Triad[4] is flag; so ignored when getting COLORREF Value > end function > -------------------------------------------------------- > > function PeekPalette(atom addr,integer x) > sequence res > integer i i = 0 > res = repeat(0,x) > for n = 1 to x-1 do > res[n] = RGB(peek({addr + i,4})) > i += 4 > end for > res[x] = RGB(peek({addr + i,4})) > return res > end function > -------------------------------------------------------- > > global function GetSystemPaletteEntries(atom HDC,integer start,integer > n) > -- n is the number of palette entries you want to receive; i use 20 on > my PC > -- start is the index of the first color you want to receive from DC > -- HDC is the display Context of desired window > atom Pointer,x > sequence pal pal = {} > Pointer = allocate(4 * n) > x = c_func(zGetSystemPaletteEntries,{HDC,start,n,Pointer}) > pal = PeekPalette(Pointer,n) > free(Pointer) > return pal > end function > ------------------------------------------------------- > > constant syspal = > > {#0,#2A0000,#2A00,#2A2A00,#2A,#2A002A,#152A,#2A2A2A,#151515,#3F1515,#153F15, > > > > #3F3F15,#15153F,#3F153F,#153F3F,#3F3F3F,#0,#50505,#80808,#B0B0B,#E0E0E,#111111, > > > > #141414,#181818,#1C1C1C,#202020,#242424,#282828,#2D2D2D,#323232,#383838,#3F3F3F, > > > > #3F0000,#3F0010,#3F001F,#3F002F,#3F003F,#2F003F,#1F003F,#10003F,#3F,#103F,#1F3F, > > > #2F3F,#3F3F,#3F2F,#3F1F,#3F10,#3F00,#103F00,#1F3F00,#2F3F00,#3F3F00,#3F2F00, > > > > #3F1F00,#3F1000,#3F1F1F,#3F1F27,#3F1F2F,#3F1F37,#3F1F3F,#371F3F,#2F1F3F,#271F3F, > > <snip> vulcan at win.co.nz
2. RE: Palettes..GRAPHICS
- Posted by jordah ferguson <jorfergie03 at yahoo.com> Oct 12, 2002
- 361 views
Darn!!! how did i forget that lib?... thanx a lot mike. I remember using it in my previous programs, i owe you one :P Jordah Mike wrote: > Jordah, > > Before I wrapped the DibDraw functions (in my small Dib functions > library)I had looked at using all the usual palette functions as you > have. I then realized that things were a whole lot simpler using > DibDraw, albeit somewhat slower. Why don't you try using my Dib > functions instead? > > Regards, > Mike > > > jordah ferguson wrote: > > Hi All, > > > > Below is a 256 system palette(syspal) my routine creates. The > > problem is that i have a 16 Color > > Video card. When i attempt to test it, it just gives me a black color > > since my display device > > cannot output more than 16 colors. I want to create a logical palette > > for my draw window > > DC but with the GDI functions i have to fill in these bits as RGB > > quads,CreatePalette, > > then SelectPalette() followed by RealizePalette(). > > > > The only helpful routine i have coded using the GDI routines to give me > > > > > > a palette > > is GetSystemPaletteEntries() which only gives me 16 colors as supposed > > to. I know i can do this > > another way by simply enumerating the graphical solid pens but according > > > > > > to my predictions, is that > > this method will just simply return to me 16 colors...... > > > > I know there is a way things can be done and most colors shown on screen > > > > > > but how, is the problem > > for example i have AHA icon editor that displays all or most of the 256 > > colors. So how do they > > do it? to they directly do low-level stuff on the Display Card which GDI > > > > > > safely doesn't do? Also could some one create a loop either using > > SetPixel or any other graphical > > functions using the system palette entries i have presented below and > > tell me the > > output is like... ie sufficient/lucks many other colors. Thanx. > > > > Jordah Ferguson. > > > > function RGB(sequence Triad) > > return Triad[1] + > > Triad[2] * 256 + > > Triad[3] * 65536 > > -- Triad[4] is flag; so ignored when getting COLORREF Value > > end function > > -------------------------------------------------------- > > > > function PeekPalette(atom addr,integer x) > > sequence res > > integer i i = 0 > > res = repeat(0,x) > > for n = 1 to x-1 do > > res[n] = RGB(peek({addr + i,4})) > > i += 4 > > end for > > res[x] = RGB(peek({addr + i,4})) > > return res > > end function > > -------------------------------------------------------- > > > > global function GetSystemPaletteEntries(atom HDC,integer start,integer > > n) > > -- n is the number of palette entries you want to receive; i use 20 on > > my PC > > -- start is the index of the first color you want to receive from DC > > -- HDC is the display Context of desired window > > atom Pointer,x > > sequence pal pal = {} > > Pointer = allocate(4 * n) > > x = c_func(zGetSystemPaletteEntries,{HDC,start,n,Pointer}) > > pal = PeekPalette(Pointer,n) > > free(Pointer) > > return pal > > end function > > ------------------------------------------------------- > > > > constant syspal = > > > > {#0,#2A0000,#2A00,#2A2A00,#2A,#2A002A,#152A,#2A2A2A,#151515,#3F1515,#153F15, > > > > > > > > #3F3F15,#15153F,#3F153F,#153F3F,#3F3F3F,#0,#50505,#80808,#B0B0B,#E0E0E,#111111, > > > > <snip>