Изображението, запазено в sdcard, показва само черен екран с помощта на GPUImageView в android

Разработвам един проект, който се използва за прилагане на някои ефекти върху изображението, което ще бъде избрано от галерията или заснето с камера.

Използвах GPUImageView за прилагане на различни ефекти върху изображенията, а също и внедрена лента за търсене за увеличаване и намаляване на ефектите. Всичко работи добре.

Проблемът е, че сега искам да запазя изображението с приложените ефекти в sdcard. Написах кода за него и работи успешно, но изображението е запазено и остава черно. Всеки път, когато проверявам изображението от sdcard, то не показва модифицираното изображение, освен черен екран.

Не знам защо показва черно изображение.

Ето кода, в който съм направил GPUImageView като drawingcachedenактивиран на true и го запазвам като изображение.

mGPUImageView.setDrawingCacheEnabled(true);
Bitmap bitmap = mGPUImageView.getDrawingCache();
String path = Environment.getExternalStorageDirectory()
                    .getAbsolutePath();
File fil = new File(path + "/MyPics");
fil.mkdir();
Random rand = new Random();
int aa = rand.nextInt();
String filename = "Photo" + aa+".jpg";
File newImg = new File(fil, filename);
    try {
        FileOutputStream out = new FileOutputStream(newImg);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
        out.flush();
        out.close();
    } catch (Exception e) {

}
    Toast.makeText(this,"File Saved at Path---->" + newImg.getAbsolutePath(),
                    Toast.LENGTH_LONG).show();
            mGPUImageView.setDrawingCacheEnabled(false);

Моля, помогнете ми да реша проблема.


person GrIsHu    schedule 26.03.2014    source източник
comment
Можете директно да получите растерно изображение с ефекти от GpuImage.getBitmapWithFilterApplied(final Bitmap bitmap), вместо да го получите от SurfaceView..   -  person kalyan pvs    schedule 26.03.2014
comment
GLSurfaceView е доста различно от нормалното View. Така че не можете да получите съдържанието на GLSurfaceView с помощта на getDrawingcache(), тъй като всичко се изобразява на GLSurfaceView с помощта на GPU. и този отговор може да ви помогне.. .   -  person Gopal Gopi    schedule 26.03.2014
comment
Защо не използвате saveToPictures() метода на GPUImageView.java?? Има ли някакъв проблем??   -  person user370305    schedule 26.03.2014
comment
@user370305 Вече опитах това, но не работи за мен.   -  person GrIsHu    schedule 26.03.2014
comment
Какви са проблемите? Виждали ли сте някакъв журнал от GPUImageView в logcat?   -  person user370305    schedule 26.03.2014
comment
Не получих никакви проблеми. Но той иска внедряване на Listener OnPictureSavedListener и слушателят иска Uri на изображението, което не е възможно да мине за мен.   -  person GrIsHu    schedule 26.03.2014
comment
Добре, извикайте public Bitmap getBitmapWithFilterApplied() този метод на GPUImage.java. Той ще върне ефекта, приложен към текущото растерно изображение и използвайки магазина на Bitmap Factory в Sdcard.   -  person user370305    schedule 26.03.2014
comment
Предполагам, че сте добавили GPUImage източник на библиотека във вашия проект.   -  person user370305    schedule 26.03.2014
comment
Да, добавено е @user370305   -  person GrIsHu    schedule 26.03.2014
comment
Добре, опитайте моя горен коментар и ми кажете какво се е случило. Тъй като GPUImage кодът на библиотеката е тестван и работи добре.   -  person user370305    schedule 26.03.2014
comment
Но използвах GPUImageView не GPUImage клас.   -  person GrIsHu    schedule 26.03.2014
comment
@GrIsHu Не знам как да използвам GPUImageView, но с GPUImage също работи добре и лесно..   -  person kalyan pvs    schedule 26.03.2014
comment
@kalyanpvs Моля, можете ли да ми покажете как сте го използвали?   -  person GrIsHu    schedule 26.03.2014
comment
@GrIsHu добре..чакай ще публикувам..   -  person kalyan pvs    schedule 26.03.2014
comment
Благодаря на всички, разреших проблема си с помощта на @user370305. Благодаря за отделеното време и предложения.   -  person GrIsHu    schedule 26.03.2014
comment
Добре дошли. Радвам се да помогна :)   -  person user370305    schedule 26.03.2014


Отговори (2)


Можете да създадете обект за GPUImage и да приложите вашия филтър..

    final GPUImage mGpuImage = new GPUImage(getApplicationContext());
    mGpuImage.setFilter(new GPUImageSharpenFilter());//Your filter here
    Bitmap effectsBItamap=mGpuImage.getBitmapWithFilterApplied(your bitmap);
person kalyan pvs    schedule 26.03.2014

Разреших проблема си, като използвах метода saveToPictures() от GPUImageView.java. Просто преобразувах File newImg в Uri и го предадох на метода onPictureSaved на слушателя на класа OnPictureSavedListener, както е показано по-долу:

        mGPUImageView.setDrawingCacheEnabled(true);
        File fil = new File(path);
        fil.mkdir();
        Random rand = new Random();
        int aa = rand.nextInt();

        mGPUImageView.setDrawingCacheEnabled(false);
         mGPUImageView.saveToPictures("MyPics", "Photo"+aa+".jpg", picSaveListener);
        picSaveListener.onPictureSaved(Uri.fromFile(newImg)); 

   OnPictureSavedListener picSaveListener = new OnPictureSavedListener() {

    @Override
    public void onPictureSaved(Uri uri) {

    }
};
person GrIsHu    schedule 26.03.2014
comment
Здравейте, искам да получа растерно изображение на родителски изглед и родителски изглед, съдържащ mGPUImageView. Но когато получа растерно изображение от родителски изглед, то показва само черен екран. Как мога да направя това? Благодаря предварително - person Ganesh Katikar; 28.03.2015