Android setPixels возвращают черный цвет - PullRequest
0 голосов
/ 29 ноября 2011

У меня есть следующие функции:

private void clearScreen(int color)
{
    fOffscreenImage.eraseColor(color);
}

private void fillRect(int x, int y, int width, int height, int color)
{
    for(;x<width;x++)
    {
        for(;y<height;y++)
        {
            buffer[x+y*PROJECTIONPLANEWIDTH] = color;
        }
    }
}

private void drawBuffer()
{
    fOffscreenImage.setPixels(buffer,0,PROJECTIONPLANEWIDTH,0,0,PROJECTIONPLANEWIDTH,PROJECTIONPLANEHEIGHT);
}

Обе функции рисуют в растровом изображении, сначала с помощью eraseColor, который работает нормально, а с помощью setPixels, который всегда возвращает черный цвет. Я записываю изображение в четырехугольник, отображаемый с помощью OpenGL. В качестве ввода цвета я попробовал цвета по умолчанию (Color.BLUE) и Color.argb. getPixel возвращает правильный вывод рассматриваемых цветов.

А вызов пикселя для setPixel также не будет работать, он будет игнорировать задание.

Я пробовал с Android 2.1 и 2.3.

Любые предложения по этому поводу были бы великолепны ..

Ответы [ 3 ]

0 голосов
/ 30 ноября 2011

Я исправил это, не используя setPixel, а вместо этого использовал canvas для рисования на растровом изображении.Однако это очень медленно ..

0 голосов
/ 01 декабря 2011
private void fillRect(int x, int y, int width, int height, int color)
{
    width += x;
    height += y;
    for(;x<width;x++)
    {
        for(;y<height;y++)
        {
            buffer[x+y*PROJECTIONPLANEWIDTH] = color;
        }
    }
}

должно быть

private void fillRect(int x, int y, int width, int height, int color)
{
    width += x;
    height += y;
    for(int y2 = y;y2<height;y2++)
    {
        for(int x2 = x;x2<width;x2++)
        {
            buffer[x2+y2*PROJECTIONPLANEWIDTH] = color;
        }
    }
}
0 голосов
/ 30 ноября 2011

Я заменил часть raycaster на следующий код fillRect, и теперь он показывает белые линии в соответствующих местах! Теперь просто чтобы узнать и другие цвета:)

private void fillRect(int x, int y, int width, int height, int color)
{
    width += x;
    height += y;
    for(;x<width;x++)
    {
        for(;y<height;y++)
        {
            if (x+y*PROJECTIONPLANEWIDTH < PROJECTIONPLANEHEIGHT*PROJECTIONPLANEWIDTH)
                buffer[x+y*PROJECTIONPLANEWIDTH] = color;
        }
    }
}
...