J2ME: загрузка изображения с сервера и сохранение на мобильном телефоне - PullRequest
1 голос
/ 01 ноября 2010

Я пытаюсь загрузить изображение с сервера и сохранить изображение на мобильном телефоне. Я могу загрузить изображение, но мне нужно изменить его размер, а затем сохранить изображение на мобильном телефоне.

код такой.

public void requestPlatform(String strURL) throws IOException {
try {

    System.out.println("requestPlatform");

      byte [] imageBytes = null;

    if ((im = getImage1(strURL)) != null) {
        im=resizeImage(im, width, height);
           if(im!=null)
        {
            System.out.println("Image");
        }

        else
            System.out.println("NoImage");
        imageBytes=get_Byte_Array(im);

        fileCon=(FileConnection)Connector.open("file:///root1/photos/diwali1.jpg",Connector.READ_WRITE);

        fileCon.create();
        if(fileCon.exists())
        {

            System.out.println("File created");
        }
        else
        {
            System.out.println("File not created");
        }

        out = fileCon.openDataOutputStream();


          if(imageBytes!=null)
        {
            out.write(imageBytes, 0, imageBytes.length);
        }
        if(out!=null)
        {
            out.close();
        }
        if(fileCon!=null)
        {
            fileCon.close();
        }
        im2=Image.createImage(imageBytes, 0, imageBytes.length);

        canvas.repaint();
    }
} catch (Exception e) {
    System.err.println("Msg: " + e.toString());
}
}

public byte[] get_Byte_Array(Image img) {

    int[] imgRgbData = new int[img.getWidth() * img.getHeight()];
    byte[] imageData2 = null;
    try
    {
    img.getRGB( imgRgbData, 0, img.getWidth(), 0, 0, img.getWidth(), img.getHeight() );
    } catch( Exception e )
    {
    }
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream( baos );

    try{
    for( int i = 0; i < imgRgbData.length; i++ )
    {
    dos.writeInt( imgRgbData[i] );
    }

    imageData2 = baos.toByteArray();
    baos.close();
    dos.close();
    }catch(Exception e)
    {

    }
    return imageData2;
    }

Проблема в том, что когда я пытаюсь изменить размер изображения, а затем сохранить его на телефоне, он просто создает файл, но изображение отсутствует. Поэтому я думаю, что при преобразовании изображения в byteArray происходит какая-то ошибка.

Ответы [ 3 ]

2 голосов
/ 02 ноября 2010

Лучший способ преобразовать изображение - это подготовить его на стороне сервера. Но если вы не можете сделать это, создайте изображение из байтовых данных и после этого используйте метод

Image.createImage(Image image, int x, int y, int width, int height, int **transform**)

Это очень дорого в ресурсах (использование памяти и процессора), но самый простой способ.

О сохранении. Вы можете сохранить данные в RMS (это возможно на всех мобильных телефонах J2ME) или в файловую систему (только на устройствах с API-интерфейсом FileConnection JSR-75).

1 голос
/ 02 ноября 2010

вы можете использовать это для изменения размера вашего изображения, хотя лучше изменить его размер на сервере, чем делать это на телефоне. вам нужно адаптировать его для изменения размера изображения до указанной ширины и высоты.

private Image resizeImage(Image src) {
      int srcWidth = src.getWidth();
      int srcHeight = src.getHeight();
      Image tmp = Image.createImage(screenWidth, srcHeight);
      Graphics g = tmp.getGraphics();
      int ratio = (srcWidth << 16) / screenWidth;
      int pos = ratio/2;

      //Horizontal Resize        

      for (int x = 0; x < screenWidth; x++) {
          g.setClip(x, 0, 1, srcHeight);
          g.drawImage(src, x - (pos >> 16), 0, Graphics.LEFT | Graphics.TOP);
          pos += ratio;
      }

      Image resizedImage = Image.createImage(screenWidth, screenHeight);
      g = resizedImage.getGraphics();
      ratio = (srcHeight << 16) / screenHeight;
      pos = ratio/2;        

      //Vertical resize

      for (int y = 0; y < screenHeight; y++) {
          g.setClip(0, y, screenWidth, 1);
          g.drawImage(tmp, 0, y - (pos >> 16), Graphics.LEFT | Graphics.TOP);
          pos += ratio;
      }
      return resizedImage;

  }//resize image

этот код взят из здесь

0 голосов
/ 28 января 2014

Это отличный скрипт для изменения размера изображения, который я использую.Надеюсь, что он служит вашим потребностям.

public Image ResizeImage(Image image, int resizedWidth, int resizedHeight) {  
    int[] in = null, out = null;  

    int width = image.getWidth(), height = image.getHeight();  
    in = new int[width];   

    int i=0;  
    int dy,dx;   
    out = new int[resizedWidth * resizedHeight];   

    for (int y = 0; y < resizedHeight; y++)   
    {   
        dy = y * height / resizedHeight;  

        image.getRGB(in,0,width,0,dy,width,1);   


        for (int x = 0; x < resizedWidth; x++)   
        {   
        dx = x * width / resizedWidth;   

        out[(resizedWidth * y) + x] = in[dx];  
        }   
    }   
    Image resized = Image.createRGBImage(out,resizedWidth,resizedHeight,true);  
    return resized;   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...