筆記本電腦什麼,我試圖做在德爾福7
我試圖繪製多個圖形到TImage中,這些圖形是我畫由具有Foodfills和線有序層的TImage透明膠片。 我使用多個緩衝區來確保排序和雙緩衝。
我在做什麼
procedure DrawScene();
var
ObjLength,LineLength,Filllength,Obj,lin,angle,i:integer;
Npoints : array[0..1] of Tpoint;
Objmap:TBitmap;
wholemap:TBitmap;
begin
wholemap := TBitmap.Create;
wholemap.Width:=area;
wholemap.height:=area;
ObjLength:=length(Objects);
for Obj:=0 to (ObjLength-1) do
if objects[Obj].Visible then
begin
// create object bitmap
if Objects[obj].Tag='FBOX' then
begin
Objmap := TBitmap.Create;
Objmap.Width:=area;
Objmap.height:=area;
Objmap.Transparent:=true;
Objmap.Canvas.Rectangle((objects[obj].Boundleft-4)+objects[obj].Position.x,area-((objects[obj].boundtop+4)+objects[obj].Position.y),(objects[obj].boundright+4)+objects[obj].Position.x,area-((objects[obj].boundbottom-4)+objects[obj].Position.y));
end;
//draw object
LineLength:=length(objects[Obj].Lines)-1;
angle:=objects[Obj].Rotation;
for lin:=0 to (LineLength) do
begin
for i:=0 to 1 do
begin
Npoints[i] := PointAddition(RotatePoint(objects[obj].Lines[lin].Point[i],angle),objects[obj].Position,false);
end;
Objmap:=DrawLine(Npoints[0].x,Npoints[0].y,Npoints[1].x,Npoints[1].y,objects[obj].Lines[lin].Color,Objmap);
end;
Filllength:=length(objects[Obj].Fills)-1;
for i:=0 to Filllength do
begin
Npoints[0]:=PointAddition(RotatePoint(objects[Obj].Fills[i].Point,objects[Obj].Rotation),objects[Obj].Position,false);
Objmap:=fillpoint(Npoints[0].x, Npoints[0].y,objects[Obj].Fills[i].color,Objmap);
end;
//write object to step frame
wholemap.Canvas.Draw(0,0,Objmap);
Objmap.Free;
end;
// write step frame to Visible Canvas
mainwindow.bufferim.Canvas.Draw(0,0,wholemap);
mainwindow.RobotArea.Picture.Graphic:=mainwindow.bufferim.Picture.Graphic;
wholemap.Free;
end;
我所期望
我希望看到層疊在彼此的頂部與每個圖像層是對於該層中的完整的圖像的每個圖像對象。 即時通訊我的例子它是一個背後有一個國旗的機器人。 該標誌首先被繪製,然後是機器人。
我得到什麼(在PC上)
在電腦上我得到了我希望和所有似乎是正確的。
我得到什麼(上一臺筆記本電腦)
在一個幾乎所有的筆記本電腦和一些PC的我只看到機器人。 我提出了一些說法,看看它是否繪製了國旗,它的確如此。遊戲甚至可以以正確的方式與旗子進行交互。 進一步的調查表明我,這是隻顯示最後一個圖像繪製我的「drawScene函數」,當圖像被直接吸引到寄託都apeared的wholecanvas
是我認爲(這不能重疊填充圖層的理由來完成) HAPPENING
所以我推斷是,TImage中的Timage.transparent財產不工作或正在計算不同在某些機器..
我做了一個測試來證明這一點,並提出了帆布紅色。然後到那個畫布上,我畫了0,0 Timage屬性透明= true,只有一個點在紅色畫布中間。結果是一個白色的畫布,中間有一個點。
我假設和發現表明,具有非常基本的圖形驅動程序的機器似乎將null或透明視爲白色,而更強大的機器似乎將null或透明視爲透明。
這似乎是有點失敗的,由於事實Timage.Transparent屬性爲true。編輯: 更新! 這似乎是在ATI顯卡上,如果顏色爲「空白」,那麼它將以PF24bit的格式進行解釋,因此不會有Alpha通道,也不會透明。
在Nvidia顯卡上,它將其作爲PF32bit並將null視爲透明。
解決該問題的一個顯而易見的方法是將bitmaptype設置爲PF32bit,但這仍然不起作用。 然後我認爲這可能不夠,我應該確保將背景設置爲透明而不是保留爲空。但Timage內部沒有工具(我可以看到)用alpha設置顏色。所有的畫布繪製功能都需要一個Tcolor,它是RGB 24位,並且具有一個TcolorRef和RGBA 32位可以做...... 有沒有一種用alpha 0繪製的方法?
什麼,我想我需要知道
如何強制透明財產上的所有機器 或工作方式,使筆記本電腦不是在透明粘貼爲白色 或者一個方法來達到同樣的效果。
任何人有任何解決方案或想法?
無論是筆記本電腦還是電腦都不應該這樣,但屏幕分辨率,特別是顏色深度可能是。你可以檢查這些東西,至少在兩臺機器上,其中一臺工作,另一臺不工作? – 2010-07-16 09:35:43
另一個可能的問題是:您的筆記本電腦的屏幕可能無法顯示您的顏色(例如:所有顏色的顏色都很淡),您覺得「透明度」的東西無法正常工作,而實際上它工作正常,沒有看到它。大多數投影儀也會出現這種情況。如何測試:在PC上打印您的應用程序,保存到位圖,將位圖複製到筆記本電腦。或者反過來,在筆記本電腦上打印屏幕並檢查PC上的位圖。 – 2010-07-16 11:33:18