2010-10-18 13 views
1

Код ниже выполнен в виде обратного вызова jpeg-изображения после вызова TakePicture. Если я сохраню данные на диске, это 1280x960 jpeg. Я попытался изменить размер изображения, но это невозможно, так как не поддерживается меньший размер. JPEG - единственный доступный формат изображения.Лучший способ масштабирования размера изображения камеры перед сохранением на SD

PictureCallback jpegCallback = new PictureCallback() { 
    public void onPictureTaken(byte[] data, Camera camera) { 
    FileOutputStream out = null; 
    Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length); 
    Bitmap sbm = Bitmap.createScaledBitmap(bm, 640, 480, false); 

data.Length примерно 500k, как и ожидалось. После выполнения BitmapFactory.decodeByteArray(), bm имеет высоту и ширину -1, поэтому кажется, что операция не работает.

  • Мне непонятно, может ли Bitmap обрабатывать данные jpeg. Я бы не подумал, но у меня есть некоторые примеры кода, которые, похоже, указывают на это.
  • Должны ли данные быть в растровом формате перед декодированием и масштабированием?
  • Если да, то как это сделать?

Спасибо!

ответ

5

На вашем surfaceCreated вы код, заданный в Камара Размер рисунка, как показано на рисунке код ниже:


public void surfaceCreated(SurfaceHolder holder) { 
     camera = Camera.open(); 
     try { 
      camera.setPreviewDisplay(holder); 
      Camera.Parameters p = camera.getParameters(); 
      p.set("jpeg-quality", 70); 
      p.setPictureFormat(PixelFormat.JPEG); 
      p.setPictureSize(640, 480); 
      camera.setParameters(p); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
 
Смежные вопросы