Pobieranie koloru Pixela

Pobieranie koloru Pixela
MR
  • Rejestracja:około 15 lat
  • Ostatnio:3 dni
0

Jak pobrać kolor piksela w Linux , pod Windowsem używałem tego kodu ale on nie działa na linux.

kolor piksela nie jest w mojej aplikacji wiec muszę użyć uchwytu.

Kopiuj
var 
  c:Tcolor;
  
  begin
      Canvas.Handle:=windows.GetWindowDC(getdesktopwindow);
      c:=canvas.Pixels[m,n];
      ReleaseDC(getdesktopwindow,canvas.handle);
  end;

Próbowałam zrobić Screanshot a potem pobrać z pliku kolor piksela ale to też nie działa
Linux Ubantu

Kopiuj
procedure TForm1.Button4Click(Sender: TObject);
var MyBitmap:Graphics.TBitmap;
    ScreenDC:LCLType.HDC;
    WrkJpg:TJpegImage;
begin
  MyBitmap:=Graphics.TBitmap.Create;
  ScreenDC:=LCLIntf.GetDC(0);
  MyBitmap.LoadFromDevice(ScreenDC);


   //Per avere un elenco dei vari formati disponibili (png, bmp, xmp, ecc.):
    //http://wiki.lazarus.freepascal.org/Developing_with_Graphics#Image_formats
    WrkJpg:=TJpegImage.Create;
    try
      WrkJpg.Assign(MyBitmap);
      WrkJpg.SaveToFile(Utf8ToSys(WinTemp + 'Mario.jpg'));
    finally
      FreeAndNil(WrkJpg);
    end;


  LCLIntf.ReleaseDC(0 , ScreenDC);
  FreeAndNil(MyBitmap);
end;
edytowany 1x, ostatnio: flowCRANE
GO
  • Rejestracja:około rok
  • Ostatnio:5 miesięcy
  • Postów:358
0

Na linuxie możesz skorzystać z X11 biblioteki czyli tej od interfejsu graficznego użytkownika, a tam możesz pobrać funkcją.

Windows ma swojego BitBlt, czyli to co wykonałeś, z delphi te wywołanie nie jest explicit w windowsie z tego co widzę, a linux ma xGetImage.

Też można innymi sposobami, ale to zależy.

edytowany 1x, ostatnio: .GodOfCode.
woolfik
  • Rejestracja:ponad 17 lat
  • Ostatnio:5 minut
  • Postów:1597
0
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 13 godzin
  • Lokalizacja:Tuchów
  • Postów:12171
0

Lazarus i jego biblioteki nie posiadają czegokolwiek, co by przechowywało informacje na temat tego co widać na ekranach i w oknach, bo to nie ma żadnego sensu. Tak więc jeśli potrzebowałem uzyskać dostęp do takich informacji (na Windows), to korzystałem z Win32 API — tworzyłem nowy TCanvas i ustawiałem mu DC pulpitu jako uchwyt. Od tej pory mogłem używać takiego płótna do różnych rzeczy, w tym do malowania (czyli malowania po pulpicie) oraz do odczytywania danych (kopiowania fragmentów pulpitu, odczytywania kolorów itd.).

Nie znam się na Linuksach, ale one są zbudowane w podobny sposób i też mają jakieś API pozwalające uzyskać dostęp do danych na temat zawartości ekranu i po nim malować. Google podpowiada, że możesz skorzystać z API Gtk/Gdk — https://stackoverflow.com/a/2540310/19103115. Możesz też przejrzeć źródła programu gcolor2 - GTK+2 Color Selector.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.