[C++/Python] Czy istnieje program który potrafiłby odczytać kolor pojedyńczych pikseli i ich lokalizacje?


(Pyrol) #1

Siemano, jako iż bawię się trochę edytorem do mapy to pomyślałem sobie, że po co stawiać pojedyńcze obiekty skoro mógłbym wygenerować PNG/Bitmapę z której odczytałbym lokalizację pikseli o wybranym kolorze i zapisałbym ich lokalizacje (X,Y - wiadomo :wink: ) do pliku ewentualnie do tablicy gdzie potem w edytorze uda mi się poustawiać dane obiekty w żądanym miejscu poprzez wczytanie tych danych .

Btw. Tak wygląda ten plik wejściowy - bym mógł odczytać lokację czarnych pikseli

Nie wiem jaki to jest stopień trudności by zrobić taki program więc jeżeli jest to ciężkie to jestem zmuszony odpuścić :frowning:

Dzięki za pomoc,
Pyrol


(iJuliusz) #2

Ja programuję w AutoHotKey
Tam jest opcja PixelSearch
Można szukać danego koloru pixela, albo kawałka obrazu w innym obrazie.

Ewentualnie zerknij


(kowgli) #3

Konkretnie Ci nie odpowiem, ale możliwość odczytania piksela będzie miała każda biblioteka do przetwarzania obrazów.
Pogugluj “[wstaw język] read bitmap”


(Pyrol) #4

@iJuliusz
@kowgli

Dzięki, jutro zobaczę, pobawię się może coś wyjdzie :wink:
Czas przypomnieć pythona, bo widzę, że nawet spoko rozwiązanie


(Fizyda) #5

Nie ma z tym najmniejszego problemu, używasz wybranej biblioteki do obsługi grafiki, wczytujesz grafikę, następnie w podwójnej pętli sprawdzasz wszystkie piksele pod kątem koloru. Coś w stylu:

Bitmap bm = new Bitmap('twojplik.bmp');

for (int i = 0; i < bm.width(); i++)
	for(int j = 0; j < bm.height(); i++)
		if(bm.getPixel(i, j).red = 0 && bm.getPixel(i, j).green = 0 && bm.getPixel(i, j).blue = 0)
			println("Kolor czarny na x=%d i y=%d", i, j);

Oczywiście zależnie od języka i wybranej biblioteki kod będzie wyglądał inaczej, ale algorytm zostaje ten sam.


(Pyrol) #6

Jak na razie podesłany przez Juliusza program będzie odpowiedni - tylko zanim go odpaliłem to musiałem trochę się namęczyć z rejestrem (bo oczywiście nie da sie biblioteki PIL zainstalować na 64bit) i zastosowałem inną opcje image.open(“png w tym samym folderze co .py”) i jeszcze tylko zamienić by zamiast koloru wyświetlało koordynaty i będzie miodzio :wink: tylko najpierw ogarnę w jakiej kolejności to wypisuje :wink:


(Fizyda) #7

Połącz to z moim pseudo kodem i masz gotowe.


(Pyrol) #8

Nie no, tak, w sumie to już mam gotowe tylko coś nie mogę ogarnąć jak leci pętla - bo dałem sobie trzy piksele różnego koloru i nie widzę tego za bardzo :wink:
Dzięki.


(Fizyda) #9

Najpierw w prawo a potem do kolejnego wiersza w dól jak się skończą kolumny. Czyli → ↓


(Pyrol) #10

Właśnie wiem o tym, ale jak patrzę po wykonanym kodzie to nie widze, kek

@Edit
W przypadku obrazów wychodzi, że idzie najpierw w dół a potem w prawo :wink:


(Fizyda) #11

Kurcze, ale się machnąłem, normalnie wstyd. Nie wiem o czym myślałem, przecież w kodzie najpierw zwiększasz Y (czyli przesuwasz się w dół) a potem X (w prawo). Dodatkowo w pętlach powinieneś zamiast podawać stały rozmiar obrazka używać atrybutów https://pillow.readthedocs.io/en/3.1.x/reference/Image.html#PIL.Image.width i https://pillow.readthedocs.io/en/3.1.x/reference/Image.html#PIL.Image.height.