2012-03-14 4 views
1

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

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

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

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

Im пытается создать эскиз 50x50. не обязательно быть точным. Это сохраняется в байте [].

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

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(); 
+2

здесь ответ: http://stackoverflow.com/questions/6650998/blackberry-get -image-data-from-bitmap – rosco

+0

@rosco. Спасибо, но для этого требуется другой Java-код. Вероятно, похоже на ответ ниже. Плюс ссылка сломана. – Doomsknight

ответ

6

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

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); 
     } 

Затем преобразовать растровое Bytes -

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(); 
            } 
+0

Как мне вернуть его в 'byte []'? – Doomsknight

+0

Я обновил ответ. Проверьте это – Signare

+1

Отличный материал, спасибо большое. Я поместил ваш BitmaptoArray в свой собственный метод. И использовал мой старый код, чтобы изменить размер растрового изображения. Прекрасно работает. Еще раз спасибо :) – Doomsknight

Смежные вопросы