URL-адрес растрового изображения для средства просмотра PanoramaGL

Я работаю над приложением, которое должно подключаться к URL-адресу, извлекать изображение в виде растрового изображения, а затем показывать его в средстве просмотра на основе библиотеки PanoramaGL.

Проблема в том, что даже если в журнале написано, что изображение захвачено, дисплей остается пустым.

Вот код, который я использую для извлечения растрового изображения, также следуя очень подробному ответу, который я нашел там Как загрузить ImageView по URL-адресу в Android?. - на самом деле я хотел бы прочитать изображение напрямую без кеша и т. Д.

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

PanoramaActivity.java (для проверки можно использовать как MainActivity)

import java.io.InputStream;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.panoramagl.PLImage;
import com.panoramagl.PLSpherical2Panorama;
import com.panoramagl.PLView;

public class PanoramaActivity extends PLView {

Private static final String TAG = "+++++++++++++++";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.panorama_activity_main);
    new DownloadImageTask(this).execute("http://www.pianetacellulare.it/UserFiles/image/Android/Jelly%20Bean/photo_sphere_esempio.jpg");
}

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {

    PanoramaActivity pan;

    public DownloadImageTask(PanoramaActivity act) {
        this.pan = act;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        Log.d(TAG,"onPostExecute");
        PLSpherical2Panorama panorama = new PLSpherical2Panorama();
        panorama.setImage(new PLImage(result));
        pan.setPanorama(panorama);
    }
}   
}

Я создал конструктор, передающий PanoramaActivity, так как я предполагаю, что приложение работает до метода onPostExecute, и мне нужно найти способ отобразить изображение. Если я ошибаюсь или есть другие способы, пожалуйста, дайте мне знать.

Я публикую также макет панорамы_activity_main.xml для тестов:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".PanoramaActivity" >
</RelativeLayout>

Любые подсказки приветствуются, спасибо заранее :)

ОБНОВИТЬ. Я попробовал тот же класс AsyncTask, используя ImageView вместо PLView, и изображение вышло, поэтому загрузка изображения выполнена правильно. В использовании PanoramaGL есть что-то неправильное.


person Lucia Belardinelli    schedule 14.05.2014    source источник
comment
Вы уверены, что растровое изображение загружено правильно и не повреждено? Вы можете записать его в файл и/или отобразить в обычном ImageView. Использование onPostExecute в порядке.   -  person greenapps    schedule 15.05.2014
comment
Привет, спасибо за ответ. Как я могу проверить, не поврежден ли он? Поскольку мне нужно отобразить изображение без сохранения, я также попробую ImageView, как вы предложили. Но если у вас есть какое-то конкретное представление о том, как решить эту проблему непосредственно с помощью PanoramaGL, лучше, поскольку в будущем у него есть очень хорошая утилита для реализации управления гироскопом и даже имитации управления гироскопом :)   -  person Lucia Belardinelli    schedule 15.05.2014
comment
@greenapps Что касается ImageView, я обнаружил, что нет способа получить интерактивную панораму в вашей деятельности ... поэтому мне нужно продолжить работу с PanoramaGL. Спасибо за помощь в любом случае.   -  person Lucia Belardinelli    schedule 15.05.2014
comment
Сохраните mIcon11 в файл. Возьмите файловый менеджер и перейдите к нему. Затем дайте ему открыться в ImageViewer. Тогда вы знаете, если он поврежден.   -  person greenapps    schedule 15.05.2014


Ответы (2)


удалять

setContentView(R.layout.panorama_activity_main);

это перезапись изображения. --> даже если я не понимаю, почему это происходит

И прежде всего... убедитесь, что изображение, на которое вы ссылаетесь, соответствует требованиям:

PanoramaGL поддерживает только изображения с размером, равным степени двойки, например. 2048x1024, 1024x1024, 1024x512, 512x512, 512x256, 256x256, 256x128.

person Lucia Belardinelli    schedule 15.05.2014
comment
PanoramaGL поддерживает только изображения с размером, равным степени двойки, например. 2048x1024, 1024x1024, 1024x512, 512x512, 512x256, 256x256, 256x128. Как я могу расширить PanoramaGL на другой формат? - person tamtoum1987; 26.12.2014

Использовать загрузчик изображений

private void loadPanorama()
    {
        try
        {
            final Context context = this.getApplicationContext();
            PLIPanorama panorama = null;
            //Lock panoramic view
            this.setLocked(true);


            Toast.makeText(context, "image loader start", Toast.LENGTH_LONG).show();
            imageLoader.loadImage("http://104.245.38.221/www/200/000/005/2000000057042/f/z_0/00.jpg", new SimpleImageLoadingListener()  
            { 
                @Override 
                public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) 
                { 
                    cubicPanorama.setImage(new PLImage(loadedImage, false), PLCubeFaceOrientation.PLCubeFaceOrientationFront);
                } 
            }); 
            imageLoader.loadImage("http://104.245.38.221/www/200/000/005/2000000057042/b/z_0/00.jpg", new SimpleImageLoadingListener()  
            { 
                @Override 
                public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) 
                { 
                    cubicPanorama.setImage(new PLImage(loadedImage, false), PLCubeFaceOrientation.PLCubeFaceOrientationBack);
                } 
            }); 
            imageLoader.loadImage("http://104.245.38.221/www/200/000/005/2000000057042/l/z_0/00.jpg", new SimpleImageLoadingListener()  
            { 
                @Override 
                public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) 
                { 
                    cubicPanorama.setImage(new PLImage(loadedImage, false), PLCubeFaceOrientation.PLCubeFaceOrientationLeft);
                } 
            }); 
            imageLoader.loadImage("http://104.245.38.221/www/200/000/005/2000000057042/r/z_0/00.jpg", new SimpleImageLoadingListener()  
            { 
                @Override 
                public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) 
                { 
                    cubicPanorama.setImage(new PLImage(loadedImage, false), PLCubeFaceOrientation.PLCubeFaceOrientationRight);
                } 
            }); 
            imageLoader.loadImage("http://104.245.38.221/www/200/000/005/2000000057042/u/z_0/00.jpg", new SimpleImageLoadingListener()  
            { 
                @Override 
                public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) 
                { 
                    cubicPanorama.setImage(new PLImage(loadedImage, false), PLCubeFaceOrientation.PLCubeFaceOrientationUp);
                } 
            }); 
            imageLoader.loadImage("http://104.245.38.221/www/200/000/005/2000000057042/d/z_0/00.jpg", new SimpleImageLoadingListener()  
            { 
                @Override 
                public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) 
                { 
                    cubicPanorama.setImage(new PLImage(loadedImage, false), PLCubeFaceOrientation.PLCubeFaceOrientationDown);
                } 
            }); 

            panorama = cubicPanorama;
            Toast.makeText(context, "image loader end", Toast.LENGTH_LONG).show();

            if(panorama != null)
            {
                //Set camera rotation
                panorama.getCamera().lookAt(0.0f, 170.0f);
                //Add a hotspot
                //panorama.addHotspot(new PLHotspot(1, new PLImage(PLUtils.getBitmap(context, R.raw.hotspot), false), 0.0f, 170.0f, 0.05f, 0.05f));
                //Reset view
                this.reset();
                //Load panorama
                this.startTransition(new PLTransitionBlend(2.0f), panorama); //or use this.setPanorama(panorama);
            }
            //Unlock panoramic view
            this.setLocked(false);
        }
        catch(Throwable e)
        {
            Toast.makeText(this.getApplicationContext(), "Error: " + e, Toast.LENGTH_SHORT).show();
        }
    }

Если появляется черный экран, вы можете переопределить

@Override
public void onLoadingStarted(String imageUri, View view) {
if (frontBitamp != null) {
cubicPanorama.setImage(new PLImage(frontBitamp, false),
PLCubeFaceOrientation.PLCubeFaceOrientationFront);
}};
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
cubicPanorama.setImage(new PLImage(loadedImage, false),
PLCubeFaceOrientation.PLCubeFaceOrientationFront);
frontBitamp = loadedImage;}
person ask4solutions    schedule 18.02.2016