Anonymous
IllegalArgumentException: ширина и высота должны быть > 0.
Сообщение
Anonymous » 24 янв 2026, 22:06
Я пытаюсь нарисовать растровое изображение на холсте, но получаю ошибки в логакте.
Лог-код такой:
Код: Выделить всё
09-22 16:41:02.081: D/dalvikvm(26969): Late-enabling CheckJNI
09-22 16:41:02.191: D/ActivityThread(26969): setTargetHeapUtilization:0.25
09-22 16:41:02.191: D/ActivityThread(26969): setTargetHeapIdealFree:8388608
09-22 16:41:02.191: D/ActivityThread(26969): setTargetHeapConcurrentStart:2097152
09-22 16:41:03.141: D/AndroidRuntime(26969): Shutting down VM
09-22 16:41:03.141: W/dalvikvm(26969): threadid=1: thread exiting with uncaught exception (group=0x41bb5438)
09-22 16:41:03.171: E/AndroidRuntime(26969): FATAL EXCEPTION: main
09-22 16:41:03.171: E/AndroidRuntime(26969): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.prova1/com.example.prova1.MoveBalloon}: java.lang.IllegalArgumentException: width and height must be > 0
09-22 16:41:03.171: E/AndroidRuntime(26969): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2114)
09-22 16:41:03.171: E/AndroidRuntime(26969): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2139)
09-22 16:41:03.171: E/AndroidRuntime(26969): at android.app.ActivityThread.access$700(ActivityThread.java:143)
09-22 16:41:03.171: E/AndroidRuntime(26969): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
09-22 16:41:03.171: E/AndroidRuntime(26969): at android.os.Handler.dispatchMessage(Handler.java:99)
09-22 16:41:03.171: E/AndroidRuntime(26969): at android.os.Looper.loop(Looper.java:137)
09-22 16:41:03.171: E/AndroidRuntime(26969): at android.app.ActivityThread.main(ActivityThread.java:4963)
09-22 16:41:03.171: E/AndroidRuntime(26969): at java.lang.reflect.Method.invokeNative(Native Method)
09-22 16:41:03.171: E/AndroidRuntime(26969): at java.lang.reflect.Method.invoke(Method.java:511)
09-22 16:41:03.171: E/AndroidRuntime(26969): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
09-22 16:41:03.171: E/AndroidRuntime(26969): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
09-22 16:41:03.171: E/AndroidRuntime(26969): at dalvik.system.NativeStart.main(Native Method)
09-22 16:41:03.171: E/AndroidRuntime(26969): Caused by: java.lang.IllegalArgumentException: width and height must be > 0
09-22 16:41:03.171: E/AndroidRuntime(26969): at android.graphics.Bitmap.createBitmap(Bitmap.java:667)
09-22 16:41:03.171: E/AndroidRuntime(26969): at android.graphics.Bitmap.createBitmap(Bitmap.java:615)
09-22 16:41:03.171: E/AndroidRuntime(26969): at com.example.prova1.MoveBalloon.getResizedBitmap(MoveBalloon.java:158)
09-22 16:41:03.171: E/AndroidRuntime(26969): at com.example.prova1.MoveBalloon.onCreate(MoveBalloon.java:99)
09-22 16:41:03.171: E/AndroidRuntime(26969): at android.app.Activity.performCreate(Activity.java:5184)
09-22 16:41:03.171: E/AndroidRuntime(26969): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
09-22 16:41:03.171: E/AndroidRuntime(26969): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2078)
09-22 16:41:03.171: E/AndroidRuntime(26969): ... 11 more
09-22 16:41:16.471: I/Process(26969): Sending signal. PID: 26969 SIG: 9
Класс, в котором возникают ошибки, указан ниже:
Код: Выделить всё
package com.example.prova1;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Point;
import android.hardware.SensorManager;
import android.os.Build;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.WindowManager;
public class MoveBalloon extends Activity {
Bitmap balloon;
Bitmap background;
Bitmap _background;
DrawBalloon myView;
float x,y,sensorX, sensorY;
SensorManager sm;
Microphone mic;
int width, height;
public class DrawBalloon extends SurfaceView implements Runnable {
SurfaceHolder ourHolder ;
Thread ourThread = null;
boolean isRunning=true;
public DrawBalloon(Context context) {
super(context);
ourHolder= getHolder();
}
public void pause() {
isRunning=false;
while(true){
try{
ourThread.join();
} catch (InterruptedException e){
e.printStackTrace();
}
break;
}
ourThread=null;
}
public void resume(){
isRunning=true;
ourThread = new Thread(this);
ourThread.start();
}
@Override
public void run (){
while(isRunning){
if(!ourHolder.getSurface().isValid())
continue;
Canvas canvas = ourHolder.lockCanvas();
updateMic();
canvas.drawBitmap(background,0,0,null);
canvas.drawBitmap(balloon, sensorX, sensorY,null);
ourHolder.unlockCanvasAndPost(canvas);
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
/*sm= (SensorManager) getSystemService(Context.SENSOR_SERVICE);
if(sm.getSensorList(Sensor.TYPE_ACCELEROMETER).size()!=0){
Sensor s = sm.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
sm.registerListener(this,s ,SensorManager.SENSOR_DELAY_NORMAL);
}*/
mic = new Microphone();
balloon = BitmapFactory.decodeResource(getResources(), R.drawable.images);
background = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
sensorX=150;
sensorY=350;
//x=y=sensorX=sensorY=0;
getSize(width,height);
_background = getResizedBitmap(background,height,width);
myView= new DrawBalloon (this);
myView.resume();
setContentView(myView);
}
/*@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sensorX=event.values[0];
sensorY=event.values[1];
}
*/
public void updateMic(){
int level = mic.getLevel();
sensorY-=level;
}
@Override
public void onBackPressed() {
finish();
}
public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) {
int width = bm.getWidth();
int height = bm.getHeight();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// Create a matrix for the manipulation
Matrix matrix = new Matrix();
// Resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// Recreate the new Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
return resizedBitmap;
}
public void getSize(int x, int y){
WindowManager w = this.getWindowManager();
Display d = w.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
d.getMetrics(metrics);
// since SDK_INT = 1;
int widthPixels = metrics.widthPixels;
int heightPixels = metrics.heightPixels;
if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17){
try {
widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d);
heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d);
} catch (Exception ignored) {
}
}
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 17){
try {
Point realSize = new Point();
Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize);
widthPixels = realSize.x;
heightPixels = realSize.y;
} catch (Exception ignored) {
}
}
x=widthPixels;
y=heightPixels;
}
}
Строка номер 99:
Код: Выделить всё
_background = getResizedBitmap(background,height,width);
Строка номер 158:
Код: Выделить всё
Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
Кто-нибудь может мне помочь?
Спасибо!
Подробнее здесь:
https://stackoverflow.com/questions/189 ... -must-be-0
1769281575
Anonymous
Я пытаюсь нарисовать растровое изображение на холсте, но получаю ошибки в логакте. Лог-код такой: [code] 09-22 16:41:02.081: D/dalvikvm(26969): Late-enabling CheckJNI 09-22 16:41:02.191: D/ActivityThread(26969): setTargetHeapUtilization:0.25 09-22 16:41:02.191: D/ActivityThread(26969): setTargetHeapIdealFree:8388608 09-22 16:41:02.191: D/ActivityThread(26969): setTargetHeapConcurrentStart:2097152 09-22 16:41:03.141: D/AndroidRuntime(26969): Shutting down VM 09-22 16:41:03.141: W/dalvikvm(26969): threadid=1: thread exiting with uncaught exception (group=0x41bb5438) 09-22 16:41:03.171: E/AndroidRuntime(26969): FATAL EXCEPTION: main 09-22 16:41:03.171: E/AndroidRuntime(26969): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.prova1/com.example.prova1.MoveBalloon}: java.lang.IllegalArgumentException: width and height must be > 0 09-22 16:41:03.171: E/AndroidRuntime(26969): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2114) 09-22 16:41:03.171: E/AndroidRuntime(26969): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2139) 09-22 16:41:03.171: E/AndroidRuntime(26969): at android.app.ActivityThread.access$700(ActivityThread.java:143) 09-22 16:41:03.171: E/AndroidRuntime(26969): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241) 09-22 16:41:03.171: E/AndroidRuntime(26969): at android.os.Handler.dispatchMessage(Handler.java:99) 09-22 16:41:03.171: E/AndroidRuntime(26969): at android.os.Looper.loop(Looper.java:137) 09-22 16:41:03.171: E/AndroidRuntime(26969): at android.app.ActivityThread.main(ActivityThread.java:4963) 09-22 16:41:03.171: E/AndroidRuntime(26969): at java.lang.reflect.Method.invokeNative(Native Method) 09-22 16:41:03.171: E/AndroidRuntime(26969): at java.lang.reflect.Method.invoke(Method.java:511) 09-22 16:41:03.171: E/AndroidRuntime(26969): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 09-22 16:41:03.171: E/AndroidRuntime(26969): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 09-22 16:41:03.171: E/AndroidRuntime(26969): at dalvik.system.NativeStart.main(Native Method) 09-22 16:41:03.171: E/AndroidRuntime(26969): Caused by: java.lang.IllegalArgumentException: width and height must be > 0 09-22 16:41:03.171: E/AndroidRuntime(26969): at android.graphics.Bitmap.createBitmap(Bitmap.java:667) 09-22 16:41:03.171: E/AndroidRuntime(26969): at android.graphics.Bitmap.createBitmap(Bitmap.java:615) 09-22 16:41:03.171: E/AndroidRuntime(26969): at com.example.prova1.MoveBalloon.getResizedBitmap(MoveBalloon.java:158) 09-22 16:41:03.171: E/AndroidRuntime(26969): at com.example.prova1.MoveBalloon.onCreate(MoveBalloon.java:99) 09-22 16:41:03.171: E/AndroidRuntime(26969): at android.app.Activity.performCreate(Activity.java:5184) 09-22 16:41:03.171: E/AndroidRuntime(26969): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 09-22 16:41:03.171: E/AndroidRuntime(26969): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2078) 09-22 16:41:03.171: E/AndroidRuntime(26969): ... 11 more 09-22 16:41:16.471: I/Process(26969): Sending signal. PID: 26969 SIG: 9 [/code] Класс, в котором возникают ошибки, указан ниже: [code]package com.example.prova1; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Point; import android.hardware.SensorManager; import android.os.Build; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.Display; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.WindowManager; public class MoveBalloon extends Activity { Bitmap balloon; Bitmap background; Bitmap _background; DrawBalloon myView; float x,y,sensorX, sensorY; SensorManager sm; Microphone mic; int width, height; public class DrawBalloon extends SurfaceView implements Runnable { SurfaceHolder ourHolder ; Thread ourThread = null; boolean isRunning=true; public DrawBalloon(Context context) { super(context); ourHolder= getHolder(); } public void pause() { isRunning=false; while(true){ try{ ourThread.join(); } catch (InterruptedException e){ e.printStackTrace(); } break; } ourThread=null; } public void resume(){ isRunning=true; ourThread = new Thread(this); ourThread.start(); } @Override public void run (){ while(isRunning){ if(!ourHolder.getSurface().isValid()) continue; Canvas canvas = ourHolder.lockCanvas(); updateMic(); canvas.drawBitmap(background,0,0,null); canvas.drawBitmap(balloon, sensorX, sensorY,null); ourHolder.unlockCanvasAndPost(canvas); } } } @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); /*sm= (SensorManager) getSystemService(Context.SENSOR_SERVICE); if(sm.getSensorList(Sensor.TYPE_ACCELEROMETER).size()!=0){ Sensor s = sm.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0); sm.registerListener(this,s ,SensorManager.SENSOR_DELAY_NORMAL); }*/ mic = new Microphone(); balloon = BitmapFactory.decodeResource(getResources(), R.drawable.images); background = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); sensorX=150; sensorY=350; //x=y=sensorX=sensorY=0; getSize(width,height); _background = getResizedBitmap(background,height,width); myView= new DrawBalloon (this); myView.resume(); setContentView(myView); } /*@Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub } @Override public void onSensorChanged(SensorEvent event) { // TODO Auto-generated method stub try { Thread.sleep(20); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } sensorX=event.values[0]; sensorY=event.values[1]; } */ public void updateMic(){ int level = mic.getLevel(); sensorY-=level; } @Override public void onBackPressed() { finish(); } public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) { int width = bm.getWidth(); int height = bm.getHeight(); float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; // Create a matrix for the manipulation Matrix matrix = new Matrix(); // Resize the bit map matrix.postScale(scaleWidth, scaleHeight); // Recreate the new Bitmap Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false); return resizedBitmap; } public void getSize(int x, int y){ WindowManager w = this.getWindowManager(); Display d = w.getDefaultDisplay(); DisplayMetrics metrics = new DisplayMetrics(); d.getMetrics(metrics); // since SDK_INT = 1; int widthPixels = metrics.widthPixels; int heightPixels = metrics.heightPixels; if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17){ try { widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d); heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d); } catch (Exception ignored) { } } // includes window decorations (statusbar bar/menu bar) if (Build.VERSION.SDK_INT >= 17){ try { Point realSize = new Point(); Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize); widthPixels = realSize.x; heightPixels = realSize.y; } catch (Exception ignored) { } } x=widthPixels; y=heightPixels; } } [/code] Строка номер 99: [code]_background = getResizedBitmap(background,height,width); [/code] Строка номер 158: [code]Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false); [/code] Кто-нибудь может мне помочь? Спасибо! Подробнее здесь: [url]https://stackoverflow.com/questions/18945082/illegalargumentexception-width-and-height-must-be-0[/url]