Delphi pixel

0

Witam
Jak mozna odczytac kolor pixela za pomoca funkcji asemblera pod win xp ? [!!!]

0

Zależy, gdzie jest ten pixel i czemu w Delphi chcesz użyć specjalnie asemblera? Zysku szybkości przecież mieć nie będziesz specjalnego - o ile w ogóle będziesz miał zysk, a nie stratę (bo optymalizator nie będzie mógł wkroczyć do akcji).

Prawdopodobnie posługujesz się Canvas.Pixels i jest zbyt wolne.. Czy tak?

0

nie jest wolne ale program do ktorego to mi jest potrzebne blokuje niskie funkcje pobierania pixeli ...

0

Co rozumiesz przez "blokuje niskie funkcje pobierania pixeli" ? Przepraszam, ale to jakiś bełkot dla mnie..

0

nie wiem jak to inaczej wytlumaczyc wiem jedno stosujac Canvas.Pixels nie jestem wstanie odczytac piksela

0

A co się wykona? Pokaż kod, napisz z czego chcesz pikselka odczytać, napisz czym się objawia niedziałanie.

0

function DesktopColor(const X, Y: Integer): TColor;
var
c: TCanvas;
begin
c := TCanvas.Create;
try
c.Handle := GetWindowDC(GetDesktopWindow);
Result := GetPixel(c.Handle, X, Y);
finally
c.Free;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
Pos: TPoint;
begin
GetCursorPos(Pos);
Shape1.brush.Color:= DesktopColor(Pos.X, Pos.Y);
end;

odczytac chce z gry :P ale po na jechaniu kursorem na nia kolorek zmienia sie na czarny bez wzgledu gdzie jest kursor

0

Jeśli gra obsługuje overlay lub akcelerację sprzętową, to pobranie obrazu z "bitmapy pulpitu' nie da Ci nic, albo najwyżej zwróci kolor tła okna, w którym jest wyświetlany obraz. To taka sama sytuacja jak robienie printscreena z odtwarzanego filmu - jak idzie przez overlay to otrzymasz czarne okno.

0

dokladnie zwraca mi czarny kolor jest jakis sposob by to obejsc ?

0

Jest, ale nie należy on bynajmniej do łatwych (ani nawet średnich), jeśli chodzi o poziom trudności. Musiałbyś uzyskać dostęp do urządzenia renderującego w określonej aplikcji, a następnie wyrenderować określoną klatkę dla siebie. Innym rozwiązaniem jest wymuszenie na sterowniku wyłączenie trybu overlay (trudne i wiąże się z bardzo dużym spadkiem szybkości chodzenia gry), aby zrobić pobranie piksela metodą jak powyżej.

Podkreślam, jest to dosyć trudne zagadnienie - do tego stopnia, że niektóre komercyjne programy do zrzutów ekranu w postaci obrazków/filmów nie mają tej opcji.

Jeszcze innym rozwiązaniem jest systemowe wyłączenie wszelkiej akceleracji sprzętowej: Panel Sterowania -> Ekran -> Ustawienia -> Zaawansowane -> Rozwiązywanie problemów -> Przyspieszenie sprzętowe: Brak. Ale o jakiejkolwiek wydajności systemu możesz zapomnieć.

0

wiem ze jest to mozliwe ale niestety nie moge uzyskac kodu <ort>poza tym </ort>byl napisanyw c++

Gameguard blocks the low level function what is used to read pixel information. That one what Microsoft provided. What I did - is a little workaround. That is why I needed C++. Actually I do not use that function, I read screen memory a different way.
Good luck.

znalazlem takie male info na jednej ze stron :P o grze

1 użytkowników online, w tym zalogowanych: 0, gości: 1