Что я пытаюсь сделать
У меня есть процедура рисования (она работает), она рисует в растровое изображение "OBJmap", а затем помещает OBJmap в Wholemap.Это все работает, но есть проблема.Кажется, что неопределенные части objmap обрабатываются как белые, хотя objmap и wholemap установлены как PF32Bit, и, следовательно, когда он помещает objmap во всю карту, за вставленным изображением появляется белое поле, которое должно быть прозрачным.Это происходит только на машинах ATI, но это для школ, и все они имеют 100% -ую ату, потому что они дешевые (я не предвзятый, честный), поэтому я рекомендовал использовать AggPas для решения этой проблемы.Мой код
procedure DrawScene();
var
ObjLength,LineLength,Filllength,Obj,lin,angle,i,x1,y1,x2,y2:integer;
Npoints : array[0..1] of Tpoint;
WG,OG: Tagg2d;
Objmap,wholemap:TBitmap;
begin
//Set up WholeMap Bitmap
wholemap := TBitmap.Create;
wholemap.PixelFormat:=pf32bit;
wholemap.Transparent:=false;
wholemap.Width:=area;
wholemap.height:=area;
WG:= Tagg2d.create;
BitmapAlphaTransparency(wholemap, 0);
WG.attach(wholemap,False);
WG.ClearAll(255,0,0,255);
//BitmapAlphaTransparency(wholemap, 255);
//WG.MasterAlpha(255);
// itterate through each object drawing the object to OBJmap
ObjLength:=length(Objects);
for Obj:=0 to (ObjLength-1) do
if objects[Obj].Visible then
begin
//Set up Object map Bitmap
Objmap := TBitmap.Create;
Objmap.PixelFormat:=pf32bit;
Objmap.Transparent:=true;
Objmap.Width:=Objects[obj].Boundright-objects[obj].Boundleft+3;
Objmap.height:=Objects[obj].BoundTop-objects[obj].Boundbottom+3;
OG:= Tagg2d.create;
OG.attach(Objmap,False);
{OG.ClearAll(0,0,255,255); // Clears all bitmap to transparrent
OG.MasterAlpha(255);
OG.LineWidth(5);
og.AntiAliasGamma(255);
OG.
OG.LineColor(0,255,0,255);
OG.FillColor(0,255,0,255);
//OG.
OG.MoveTo(0,0);
OG.LineTo(Objmap.width-1,Objmap.height-1); }
//Draw the Lines to Objmap
LineLength:=length(objects[Obj].Lines)-1;
angle:=objects[Obj].Rotation;
for lin:=0 to (LineLength) do
begin
//Transform points
for i:=0 to 1 do
Npoints[i] := PointAddition(RotatePoint(objects[obj].Lines[lin].Point[i],angle),point(-objects[obj].boundleft,-Objects[obj].Boundbottom),false);
//draw transformed points
Objmap:=DrawLine(Npoints[0].x,Npoints[0].y,Npoints[1].x,Npoints[1].y,objects[obj].Lines[lin].Color,Objmap,OG);
end;
//Draw the Fills to Objmap
Filllength:=length(objects[Obj].Fills)-1;
for i:=0 to Filllength do
begin
//transform points
Npoints[0]:=PointAddition(RotatePoint(objects[Obj].Fills[i].Point,objects[Obj].Rotation),point(-objects[obj].boundleft,-Objects[obj].Boundbottom),false);
// fill points
Objmap:=fillpoint( Npoints[0].x, Npoints[0].y,objects[Obj].Fills[i].color,Objmap);
end;
//draw objmap to wholemap
x1:=objects[obj].Position.x+objects[obj].Boundleft-1;
y1:=area-(objects[obj].Position.y+objects[obj].Boundtop)-2;
x2:=x1+Objmap.Width;
y2:=y1+Objmap.Height;
WG.TransformImage(Objmap,x1,y1,x2,y2); //this show border
//WG.copyimage(Objmap,x1,y1); //this draws the scene up but does not handle transparencies correctly
//wholemap.Canvas.Draw(x1,y1,Objmap);//does not work in PF32bit or on ati machines
//wg.Free; // this it does not like (crash) do i need it?
Objmap.Free;
end;
// write wholemap to Visible Canvas
mainwindow.bufferim.Canvas.Draw(0,0,wholemap);
wholemap.Free;
mainwindow.RobotArea.Picture.Graphic:=mainwindow.bufferim.Picture.Graphic;
end;
Примеры изображений
Не работает, Работает и, текущий соответственно
![alt text](https://i44.photobucket.com/albums/f14/keahicheveyo/outside.jpg)
Я могу получить рабочий результат только на машинах Nvidia с методом по умолчанию
wholemap.Canvas.Draw
и хочу, чтобы он работал на всех машинах с использованием aggpass.
Что мне делать, как я рисую objmap на всю карту, но не рисую прозрачные биты?