Проблема с Android с «createBitmap» и данными субпикселей - PullRequest
1 голос
/ 28 сентября 2011

В настоящее время я разрабатываю небольшое приложение для Android, чтобы ознакомиться с API. Тем не менее, я столкнулся с проблемой, касающейся субпиксельных данных при использовании createBitmap. В настоящее время у меня есть эти блоки кода. (ПРИМЕЧАНИЕ. Считываемое изображение имеет формат JPEG RGB565 128x128):

public class MainMenu extends View {
private int vWidth;     // Width of our view
private int vHeight;    // Height of our view
private Bitmap imgButtons;
private Rect rect;
private MenuItem testButton;
private MenuItem testButton2;

public MainMenu(Context context) {
    super(context);

    // Get our view dimensions
    vWidth = getWidth();
    vHeight = getHeight();

    // Load our menu buttons' image
    BitmapFactory.Options imgOptions = new BitmapFactory.Options();
    imgButtons = BitmapFactory.decodeResource(getResources(), R.drawable.mainmenubuttons, imgOptions);
    rect = new Rect(100, 400, 228, 528);

    // Create our menu buttons and load their specific images
    testButton = new MenuItem(100, 50);
    testButton2 = new MenuItem(100, 200);

    testButton.LoadImage(imgButtons, 128, 64, 0, 0);
    testButton2.LoadImage(imgButtons, 128, 64, 0, 64);
}

@Override
public void onDraw(Canvas canvas) {
    canvas.drawBitmap(imgButtons, null, rect, null);
    testButton.Draw(canvas);
    testButton2.Draw(canvas);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() != MotionEvent.ACTION_DOWN)
        super.onTouchEvent(event);

    return true;
}
}

class MenuItem {
private int xPos; // Center x-coordinate
private int yPos; // Center y-coordinate
private int width; // Button width
private int height; // Button height
private Rect rect;
private Bitmap buttonImage;

public MenuItem(int withXPos, int withYPos) {
    xPos = withXPos;
    yPos = withYPos;
}

public void LoadImage(Bitmap image, int imageWidth, int imageHeight, int xOffset, int yOffset) {
    width = imageWidth;
    height = imageHeight;

    buttonImage = Bitmap.createBitmap(image, xOffset, yOffset, width, height);
    rect = new Rect(xPos - (width >> 1), yPos - (height >> 1), 
                    xPos + (width >> 1), yPos + (height >> 1));
}

public void Draw(Canvas canvas) {
    canvas.drawBitmap(buttonImage, null, rect, null);
}
}

Ниже изображение, отображающее проблему:

Я солгал. Я пока не могу публиковать изображения, поэтому вот ссылка на изображение: проблемы создания createBitmap

Итак, почему я могу правильно отображать исходное изображение, но не могу правильно отображать изображения, созданные из его субпиксельных данных? Я запустил приложение, используя версии от 2.1 до 3.0, и 3.0 не имеет проблем с отображением изображения правильно. Это просто проблема с устройствами до версии 3.0, или я что-то упустил? Я нашел статью со стопкой, описывающую проблемы между использованными твердыми изображениями (RBG565) и изображениями, которые содержат альфа (ARGB8888). Где, мой метод не сработал бы, если изображение было типа ARGB8888, и если это так, мне нужно было физически обрабатывать данные пикселей и самостоятельно копировать данные субпикселей и создавать свой собственный буфер пикселей для хранения этих данных. Я попробовал это по прихоти, и это привело меня к той же проблеме. Я просто решил, почему бы не попробовать? Я также пробовал другие варианты Bitmap.createBitmap безрезультатно. На данный момент я немного озадачен и решил, что я спрошу сообщество.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...