Загрузить изображения с Android на веб-сервис - PullRequest
0 голосов
/ 06 декабря 2011

Я пытаюсь создать приложение для Android, которое берет изображение с камеры. Затем я отправляю это изображение в веб-сервис, который создаю и редактирую. В данный момент я просто пытаюсь отправить изображение и просто вернуть его обратно и показать в виде изображения. Я просто пытаюсь понять, как собирается работать с веб-сервисом. Я отправляю byte [] и получаю byte []. Нужно ли мне конвертировать в веб-сервис и возвращать другой тип, или это нормально, чтобы вернуть byte []? я использую ksoap2 для соединения с веб-сервисом. я не знаю, что делать, когда я получаю результат и как преобразовать результат в растровое изображение! Любая помощь ???????

Код:

    if (requestCode == CAMERA_DATA)
        if (resultCode == Activity.RESULT_OK) {
            Bundle extras = data.getExtras();
            bitmap = (Bitmap) extras.get("data");

            setContentView(R.layout.photo3);
            image = (ImageView) findViewById (R.id.imageView);

            ByteArrayOutputStream out = new ByteArrayOutputStream();
            bitmap.compress(CompressFormat.JPEG, 100, out);
            data1 = out.toByteArray();

            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
            request.addProperty("name",data1);  


            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
            envelope.dotNet = false;
            envelope.setOutputSoapObject(request);

            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

              try {
               androidHttpTransport.call(SOAP_ACTION, envelope);

                SoapPrimitive resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();

                //WHAT TO DO HERE

                image.setImageBitmap(btm);



              } catch (Exception e) {


              }






            try {
                out.close();
            }
            catch(IOException e){

            }
     }

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Здравствуйте. Пожалуйста, проверьте код ниже

Первый метод используется для преобразования файла в = в base64, а второй метод - для сжатия любого изображения.Вы можете использовать этот код для кодирования в base64 и добавления строки параметров мыла, которая возвращается из первого метода

private String getEncodeData(String filePath) {
            String encodedimage1 = null;
            if (filePath != null && filePath.length() > 0) {
                try {
                    Bitmap bm = decodeFile(new File (filePath));
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();  
                    bm.compress(Bitmap.CompressFormat.PNG, 50, baos); //bm is the bitmap object 
                    byte[] b = baos.toByteArray();
                    encodedimage1= Base64.encodeToString(b, Base64.DEFAULT);
                } catch (Exception e) {
                    System.out
                    .println("Exception: In getEncodeData" + e.toString());
                }
            }
            return encodedimage1;
        }

private Bitmap decodeFile(File f){
        Bitmap b = null;
        final int IMAGE_MAX_SIZE = 100;
        try {
            BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            FileInputStream fis = new FileInputStream(f);
            BitmapFactory.decodeStream(fis, null, o);
            fis.close();
            int scale = 1;
            if (o.outHeight > IMAGE_MAX_SIZE || o.outWidth > IMAGE_MAX_SIZE) {
                scale = (int) Math.pow(2.0, (int) Math.round(Math.log(IMAGE_MAX_SIZE / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)));
            }
            BitmapFactory.Options o2 = new BitmapFactory.Options();
            o2.inSampleSize = scale;
            fis = new FileInputStream(f);
            b = BitmapFactory.decodeStream(fis, null, o2);
            fis.close();
        } catch (Exception e) {
            Log.v("Exception in decodeFile() ",e.toString()+"");
        }
        return b;
    }

Пожалуйста, дайте мне знать о любых других трудностях

0 голосов
/ 06 декабря 2011

Что представляет собой байтовый массив?Это файл в каком-то определенном формате?(PNG, JPEG и т. Д.) Или это необработанные байты, представляющие значения RGB (A) изображения?В последнем случае может быть полезен BufferedImage стандартных библиотек Java.В частности, метод setRGB: http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/image/BufferedImage.html#setRGB(int,%20int,%20int,%20int,%20int[],%20int,%20int)

Просто создайте новый BufferedImage нужных размеров и правильного типа изображения и используйте метод setRGB для вставки значений пикселей.Позже это можно использовать для отображения в ImageView или просто сохранить на устройстве.

Надеюсь, это поможет ...

...