Link to home
Start Free TrialLog in
Avatar of mathematics
mathematics

asked on

set the palette of TImage

if I had a component
TImage Image1;
I want set it's palette,
How can I do this?
Avatar of mathematics
mathematics

ASKER

for exnape PALETTEENTRY *pe[16] =
{{255,255,255,0},{{0,0,0,0},...
}.............
and then?
Avatar of kretzschmar
hi mathematics,

a sample from the borland help
(based on a TBitmap)

unit bmpformu;

//
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;
type
  TBmpForm = class(TForm)
    Button1: TButton;
    procedure FormDestroy(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    Bitmap: TBitmap;
    procedure ScrambleBitmap;

    procedure WMEraseBkgnd(var m: TWMEraseBkgnd); message WM_ERASEBKGND;
  public
    { Public declarations }
  end;
var
  BmpForm: TBmpForm;
implementation

{$R *.DFM}

procedure TBmpForm.FormCreate(Sender: TObject);
begin
  Bitmap := TBitmap.Create;
  Bitmap.LoadFromFile('bor6.bmp');
end;
procedure TBmpForm.FormDestroy(Sender: TObject);
begin
  Bitmap.Free;
end;
// since we're going to be painting the whole form, handling this

// message will suppress the uneccessary repainting of the background
// which can result in flicker.
procedure TBmpform.WMEraseBkgnd(var m : TWMEraseBkgnd);
begin
  m.Result := LRESULT(False);
end;
procedure TBmpForm.FormPaint(Sender: TObject);
var
  x, y: Integer;
begin
  y := 0;
  while y < Height do
  begin
    x := 0;
    while x < Width do
    begin
      Canvas.Draw(x, y, Bitmap);

      x := x + Bitmap.Width;
    end;
    y := y + Bitmap.Height;
  end;
end;
procedure TBmpForm.Button1Click(Sender: TObject);
begin
  ScrambleBitmap;
  Invalidate;
end;

//
// scrambling the bitmap is easy when it has 256 colors:
// we just need to change each of the colors in the palette
// to some other value.
//
procedure TBmpForm.ScrambleBitmap;
var
  pal: PLogPalette;
  hpal: HPALETTE;

  i: Integer;
begin
  pal := nil;
  try
    GetMem(pal, sizeof(TLogPalette) + sizeof(TPaletteEntry) * 255);
    pal.palVersion := $300;
    pal.palNumEntries := 256;
    for i := 0 to 255 do
    begin
      pal.palPalEntry[i].peRed := Random(255);
      pal.palPalEntry[i].peGreen := Random(255);
      pal.palPalEntry[i].peBlue := Random(255);
    end;
    hpal := CreatePalette(pal^);
    if hpal <> 0 then

      Bitmap.Palette := hpal;
  finally
    FreeMem(pal);
  end;
end;
end.

meikl
Can we not loadfromfile and
it's run ok?
->Bitmap.LoadFromFile('bor6.bmp');
Is this line necessary?
Because I didn't want use any resource.
hi mathematics,

thats just a sample,
which shows how to access a palette,
based on a bitmap, you must not load it from a file.

meikl
After I Image1->Canvas->LineTo(100,100),
the palette is truecolor,
I set the palette to 16 colors,
and savetofile(a.bmp)
,I dump the a.bmp,
but the file is not 16 colors.
Why?
How can I setup the palette?
ASKER CERTIFIED SOLUTION
Avatar of edey
edey

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial