[c++][Allegro] Jak uzyskać wskaźnić do pojedyńczego piksela na bitmapie?
Ostatnio zmodyfikowano 2010-08-15 10:45
mistrzu.1995 Temat założony przez niniejszego użytkownika |
[c++][Allegro] Jak uzyskać wskaźnić do pojedyńczego piksela na bitmapie? » 2010-08-12 14:06:12 Witam wszystkich czytających! W jaki sposób uzyskać wskaźnik do pojedyńczego piksela w bitmapie za pomoca wskaźnika typu int*? O jaką wartośc go przesuwac gdy mamy nowy "wiersz" pikseli, np. Bitmapa ma wymiary 300px na 300px to gdy wskaźnik zacznie wskazywac na piksel o wymiarach na bitmapie 300,0 to ile należy dodać aby uzyska,ć dostęp do piksela wymiarach 0,1? |
|
szyx_yankez |
» 2010-08-12 14:17:07 Co chcesz przez to osiągnąć? |
|
mistrzu.1995 Temat założony przez niniejszego użytkownika |
przyspiesznie » 2010-08-12 14:20:49 Chcę w ten sposób przyspieszyć rysownie mojej tablicy int na bitmapie. Stosowałem dotąd rozwiązanie z _putpixel24 , jednak zauważyłem, że jest ono strasznie wolne więc pomyslałem, że lepiej będzie modyfikowac piksele bitmapy poprzez wskaźnik a nie funkcję. Rozwiązaniem lepszym od tego byłoby po prostu zrzutownie tej tablicy in[][] do typu bitmap , jednak na innym forum napisano mi że jest to niemozliwe, więc uznałem że rozwiazanie ze wskaźnikiem bedzie najlepsze. Wie ktoś jak go przypisac do pikesla? |
|
OSA_PL |
» 2010-08-12 14:40:50 Nie wiem jak rozwiązać twój problem, ja tam zawsze tablice wczytywałem w pętli for. Ale jedno zauważyłem wczoraj pisałem program do analizy obrazu, i przy każdym przejściu pętli kopiowałem bufor na ekran, i szło to bardzo ale to bardzo wolno,więc przeniosłem kopiowanie bufora za pętlę for i wtedy wszystko szło jak trzeba. |
|
malan |
» 2010-08-12 22:24:12 #include <iostream> #include <fstream>
int main() { std::fstream file; const int SIZE_X = 300, SIZE_Y = 300; int tPixel[ SIZE_X ][ SIZE_Y ]; file.open( "result.txt", std::ios::out ); if( file.good() ) { for( int i = 0; i < SIZE_X; i++ ) { for( int j = 0; j < SIZE_Y; j++ ) { tPixel[ i ][ j ] = 0; std::cout << "tPixel[" << i << "][" << j << "]\n"; file << "tPixel[" << i << "][" << j << "]\n"; } } file.close(); } return 0; } O coś takiego Ci chodziło? Przecież to się bardzo ślimaczy... |
|
DejaVu |
» 2010-08-12 23:05:11 Jeżeli już musisz 'pixelować' i zależy Ci na wydajności to użyj biblioteki wspierającej rendering sprzętowy, np. OpenGL lub DirectX.
/edit: Jak poczytasz dokumentację Allegro to doczytasz się, że zawartość bitmap należy modyfikować tylko i wyłącznie za pośrednictwem dostarczonych funkcji. |
|
mistrzu.1995 Temat założony przez niniejszego użytkownika |
» 2010-08-15 09:04:20 A może da się w jakiś sposób "oszukać" kompilator aby za pomocą wskaźnika na bitmapę odczytywał tą tablice jako bitmapę? Bo funkcja blit jest szybsza niż pętla + putpixel |
|
pekfos |
» 2010-08-15 10:45:46 po co ty tak kombinujesz by coś zrobić jak się tego nie robi i nie powinno się robić? Wątpię że przejrzałeś dokumentację allegro. Przeczytaj ją to na pewno znajdziesz funkcję która robi to co chcesz. Jak będziesz się kierować wyłącznie względem efektywności to nigdy nie napiszesz dużego programu bo się zamotasz w skomplikowanym kodzie i tyle byś z tego miał. Niech najpierw działa, potem niech działa szybko. Czego byś nie napisał to zawsze możesz zoptymalizować. |
|
« 1 » |