unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DXDraws, DIB, DXClass, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    cb1: TComboBox;
    Start: TButton;
    procedure DXTimerTimer(Sender: TObject; LagCount: Integer);
    procedure StartClick(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
  procedure createmmap(Color:Tcolor;alpha:byte); //Вот процедурка
  end;

var
  Form1: TForm1;
  inaaa:boolean; //Картинку с измененной палитрой можно рисовать
implementation

{$R *.dfm}

procedure Tform1.createmmap(Color:Tcolor;alpha:byte);
var
 NG : TDIB;
 Item: TPictureCollectionItem;
 tm:Tdirectdrawsurface;
 i:integer;
 est:boolean; //Присутствует ли уже измененная картика в списке
 TC:TColor;   //TransparentColor;
begin
  ng:=tdib.Create;     //Создаем картинку (пустую)
  tm:=Tdirectdrawsurface.Create(DXDraw.Surface.DDraw); //Создаем поверхность
  tm.SystemMemory:=false; //Нада
  tm.SetSize(il.Items[0].Width,il.Items[0].height); //Устанавливаем размер поверхности по размеру исходной картинки
  tm.Fill(color); //Заполняем фон нужным цветом
  il.Items[0].DrawAlpha(tm,bounds(0,0,il.Items[0].width,il.Items[0].height),0,alpha); //Рисуем исходную картинку на фон с прозрачностью
  tm.AssignTo(ng); //Сохраняем изображение в картинку (создана первой строкой)
  tm.Free; //Очищаем память от поверхности
  TC:=ng.Canvas.Pixels[0,0];  //Возьмем цвет точки 0,0 в качестве Transparent
  est:=false; //Ставим на нет, то что картинка уже есть в списке
  for i:=0 to il.Items.Count-1 do //Если же она есть
  if il.Items[i].Name='MMG' then //ТО
  est:=true; //Ставим на Да
  if est then //Если ДА то
  begin //Изменяем уже существующую картинку
  item:=il.Items.Find('MMG');
  Item.Picture.Graphic := ng;
  item.TransparentColor:=TC;
  item.Transparent:=true;
  Item.Restore;
  end
  else
  begin //Если же Нет, то заносим в список новую!
  Item := TPictureCollectionItem.Create(IL.Items);
  Item.Name:='MMG';
  Item.SystemMemory:=false;
  Item.Picture.Graphic := ng;
  item.TransparentColor:=TC;
  item.Transparent:=true;
  Item.Restore;
  end;
end;


procedure TForm1.DXTimerTimer(Sender: TObject; LagCount: Integer);
begin
dxdraw.Surface.Fill(0);
il.Items.Find('img').Draw(dxdraw.Surface,0,0,0);
if inaaa then
il.Items.Find('mmg').Draw(dxdraw.Surface,80,0,0);
dxdraw.Flip;
end;

procedure TForm1.StartClick(Sender: TObject);
var cl:Tcolor;
begin
if cb1.Items[cb1.ItemIndex]='Black' then cl:=clBlack;
if cb1.Items[cb1.ItemIndex]='White' then cl:=clWhite;
if cb1.Items[cb1.ItemIndex]='Red' then cl:=clRed;
if cb1.Items[cb1.ItemIndex]='Green' then cl:=clGreen;
if cb1.Items[cb1.ItemIndex]='Blue' then cl:=clBlue;

cl := DXDraw.Surface.ColorMatch(cl);  //Конвертируем цвет в формат DXDraw

createmmap(cl,strtoint(edit1.text)); //Вот сама процедура изменения гаммы
inaaa:=true;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
 if strtoint(edit1.text) >255 then edit1.text:='255';
 if strtoint(edit1.text) <0 then edit1.text:='0';
end;

end.
