Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c++][Allegro] Jak uzyskać wskaźnić do pojedyńczego piksela na bitmapie?

Ostatnio zmodyfikowano 2010-08-15 10:45
Autor Wiadomość
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?
P-20737
szyx_yankez
» 2010-08-12 14:17:07
Co chcesz przez to osiągnąć?
P-20739
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?
P-20740
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.  
P-20742
malan
» 2010-08-12 22:24:12
C/C++
#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...
P-20756
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.
P-20759
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
P-20842
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ć.
P-20843
« 1 »
  Strona 1 z 1