JavaME Изменить размер изображения - PullRequest
1 голос
/ 14 марта 2012

У меня есть byte[], в котором хранится мое изображение.

Теперь я хочу иметь возможность масштабировать его и сохранять в другом byte[].

Я знаю, как масштабировать Bitmap с, и может конвертировать мои из byte[] в Bitmap.Но я не могу вернуть масштабированное изображение обратно в byte[].

Ежевика EncodedImage thumbnail = image.scaleImageToFill(50, 50); ничего не делает.

Я пытаюсь создать миниатюру 50х50.не должен быть точным.Это хранится в байте [].

Как изменить размер изображения, хранящегося в байте [], и сохранить его в новом байте [].

 byte[] imageTaken;
 //Create thumbnail from image taken
 EncodedImage image = EncodedImage.createEncodedImage(imageTaken, 0, -1);
 image.getBitmap();
 EncodedImage thumbnail = image.scaleImageToFill(50, 50);           
 byte[] thumbArray = thumbnail.getData();

1 Ответ

6 голосов
/ 14 марта 2012

попробуйте этот код

bitmap = resizeImage(your image, 50,50);


 private static EncodedImage resizeImage(EncodedImage image, int width, int height) {
        if (image == null) {
          return image;
        }

        //return if image does not need a resizing
        if (image.getWidth() <= width && image.getHeight() <= height) {
          return image;
        }

        double scaleHeight, scaleWidth;
        if (image.getWidth() > width && image.getHeight() > height) {  //actual image is bigger than scale size
          if (image.getWidth() > image.getHeight()) {  //actual image width is more that height then scale with width
            scaleWidth = width;
            scaleHeight = (double)width / image.getWidth() * image.getHeight();
          } else { //scale with height
            scaleHeight = height;
            scaleWidth = (double)height / image.getHeight() * image.getWidth();
          }
        } else if (width < image.getWidth()) { //scale with scale width or height
          scaleWidth = width;
          scaleHeight = (double)width / image.getWidth() * image.getHeight();
        } else {
          scaleHeight = height;
          scaleWidth = (double)height / image.getHeight() * image.getWidth();
        }
        int w = Fixed32.div(Fixed32.toFP(image.getWidth()), Fixed32.toFP((int)scaleWidth));
        int h = Fixed32.div(Fixed32.toFP(image.getHeight()), Fixed32.toFP((int)scaleHeight));
        return image.scaleImage32(w, h);
      } 

Затем преобразовать растровое изображение в байты -

JPEGEncodedImage encoder=JPEGEncodedImage.encode(bitmap,100);
                        byte[] array=encoder.getData();
                        int length=array.length;
                        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(length);
                        Base64OutputStream base64OutputStream = new Base64OutputStream( byteArrayOutputStream );
                         try{
                                         base64OutputStream.write( array, 0, length );
                                         base64OutputStream.flush();
                                         base64OutputStream.close();


                                     }
                                        catch (IOException ioe){
                                        //Dialog.alert("Error in encodeBase64() : "+ioe.toString());
                                        System.out.println("Error in encodeBase64() : "+ioe.toString());

                                     }
                                     try {
                                        byte[]  data = Base64InputStream.decode(byteArrayOutputStream.toString());

                                    } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }
...