Класс Графика в Blackberry - PullRequest
2 голосов
/ 23 июня 2011

Плз, кратко объясните с примерами значение

public void drawBitmap(int x,
                       int y,
                       int width,
                       int height,
                       Bitmap bitmap,
                       int left,
                        int top)

  Use this method to draw a bitmap. You specify the destination region 
  for the bitmap by describing the **extent** of the region 
  with passed parameters.

(Вопрос 1). Плз четко объяснит, что означает по протяженности региона

(Квест 2)
x - Левый край области назначения.

y - Верхний край области назначения.

left - Левый край области внутри растрового изображения для рисования.

top - Верхний край области внутри растрового изображения для рисования.

У меня путаница в х, у, слева, сверху. Предположим, я хочу нарисовать картинку слева от пользовательской кнопки. и мой

protected void paint(Graphics graphics) 

{

      graphics.setColor(Color.RED);

      graphics.fillRoundRect(1, 1, getWidth()-2, getHeight()-2, 12, 12);
      int ph = onPicture.getHeight();

      graphics.drawBitmap(0, 0, getWidth(), getHeight(), onPicture, 0, 0);
      graphics.setColor(Color.GREENYELLOW);
      int x = (bw/2 - labelWidth/2);
      int y = (bh/2 - labelHeight/2);
      graphics.drawText(label, x, 8);
    }

На самом деле моя проблема, если я напишу

graphics.drawBitmap(0, 0, getWidth(), getHeight(), onPicture, 10, 0);

вместо

graphics.drawBitmap(0, 0, getWidth(), getHeight(), onPicture, 0, 0);

выдает ошибку "исходный код не найден" И в соответствии с моей концепцией x, y, getPrefferedheight (), getPrefferedWidth дает область внутри пользовательской кнопки, в пределах которой может быть нарисовано созданное растровое изображение, и соответственно я устанавливаю значение 10 вместо 0, но это дает исходный код ошибки, не найденный .. ... Кто-нибудь может мне помочь, что не так в моей концепции.

Ответы [ 2 ]

4 голосов
/ 23 июня 2011

Самый простой способ думать об этом - это то, что drawBitmap позволяет рисовать только часть растрового изображения. Параметры определяют прямоугольник, в который вы хотите нарисовать, и прямоугольник, который вы хотите скопировать из растрового изображения. Таким образом, экстент области означает ширину и высоту области, которую вы будете рисовать, и определяется параметрами width и height. x и y указывают координаты, которые вы хотите нарисовать, а left и top указывают верхние левые координаты в растровом изображении, которое вы хотите скопировать. Это означает, что

graphics.drawBitmap(0, 0, getWidth(), getHeight(), onPicture, 10, 0);

возьмет часть растрового изображения и нарисует его в левом верхнем углу вашего целевого графического объекта (графический объект в этом контексте - это просто место, в которое вы рисуете, которое будет отображаться на экране). Левые 10 пикселей растрового изображения не будут отрисованы, и область, которая будет нарисована, будет иметь ширину getWidth() и высоту getHeight(). В отличие от

graphics.drawBitmap(0, 0, getWidth(), getHeight(), onPicture, 0, 0);

будет рисовать в той же позиции и том же размере, но не будет обрезать левые 10 пикселей растрового изображения (вместо этого будет прекращено копирование растрового изображения на 10 пикселей раньше с правой стороны).

Тем не менее, я не думаю, что этот вызов действительно является причиной ошибки, которую вы видите. Если вы получаете сообщение об ошибке «Исходный код не найден», то, скорее всего, это проблема обновления кода на ежевике после внесения изменений. Обычно это можно исправить, выполнив чистую сборку. В некоторых ситуациях вам даже может понадобиться сбросить симулятор. Вы можете сделать это, открыв командную строку, перейдя в папку симулятора (в <eclipse dir>/plugins/net.rim.ejde.componentpack.../components/simulator) и запустив clean.bat

3 голосов
/ 23 июня 2011

кратко я могу объяснить, как это.если вы хотите, чтобы ваш значок был таким, вы должны установить left и top "0".
enter image description here

...