Autore Topic: salvare file modificato...  (Letto 587 volte)

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
salvare file modificato...
« il: 08 Maggio 2015, 00:11:12 CEST »
0
ciao a tutti!!!

stò facendo delle prove con warp image...ma quando salvo l'immagine modificata mi salva come immagine originale:

questo è il codice che stò studiando:

Codice (Java): [Seleziona]
public class MainActivity extends Activity {  
    /** Called when the activity is first created. */  
       
    static Bitmap bitmap;  

    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(new MyView(this,R.drawable.sample11));  
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
       
        if (id == R.id.save_warp) {
                saveImage();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public Bitmap saveImage() {
        FileOutputStream out = null;
        try {
            out = new FileOutputStream("/sdcard/image.png");
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance
            // PNG is a lossless format, the compression factor (100) is ignored
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
                return bitmap;
               
    }
    public class MyView extends View  
    {  
        //,,20  
        private final int WIDTH = 20;  
        private final int HEIGHT = 20;  
        //441  
        private final int COUNT = (WIDTH + 1) * (HEIGHT + 1);  
        //,Bitmap21*21  
        private final float[] verts = new float[COUNT * 2];  
        //,Bitmap21*21  
        //  
        private final float[] orig = new float[COUNT * 2];  
        public MyView(Context context, int drawableId) {  
            super(context);  
            setFocusable(true);  
            //  
            bitmap = BitmapFactory.decodeResource(getResources(), drawableId);  
            //  
            float bitmapWidth = bitmap.getWidth();  
            float bitmapHeight = bitmap.getHeight();  
            int index = 0;  
            for(int y = 0; y <= HEIGHT; y++)  
            {  
                float fy = bitmapHeight * y / HEIGHT;  
                for(int x = 0 ; x <= WIDTH; x++)  
                {  
                    float fx = bitmapWidth * x / WIDTH;  
                    //orig,verts  
                    //,orig,verts21 * 21x,y?  
                    orig[index * 2 + 0] = verts[index * 2 + 0] = fx;  
                    orig[index * 2 + 1] = verts[index * 2 + 1] = fy;  
                    index += 1;  
                }  
            }  
            //  
            setBackgroundColor(Color.WHITE);  
        }  

               

                protected void onDraw(Canvas canvas)  
        {  
            //bitmapverts  
            //(50)  
            canvas.drawBitmapMesh(bitmap, WIDTH, HEIGHT, verts, 0, null, 0, null);  
        }  
        //,verts  
        private void warp(float cx, float cy)  
        {  
            for(int i = 0; i < COUNT * 2; i += 2)  
            {  
                float dx = cx - orig[i + 0];  
                float dy = cy - orig[i + 1];  
                float dd = dx * dx + dy * dy;  
                //(cx,cy)  
                float d = (float)Math.sqrt(dd);  
                //?(cx,cy)?  
                float pull = 80000 / ((float)(dd * d));  
                //verts(bitmap?21 * 21)  
                if(pull >= 1)  
                {  
                    verts[i + 0] = cx;  
                    verts[i + 1] = cy;  
                }  
                else  
                {  
                    //  
                    verts[i + 0] = orig[i + 0] + dx * pull;  
                    verts[i + 1] = orig[i + 1] + dx * pull;  
                }  
            }  
            //View  
            invalidate();  
        }  
        public boolean onTouchEvent(MotionEvent event)  
        {  
            //warpverts  
            warp(event.getX() , event.getY());  
            return true;  
        }
       
       
    }  
}  

non capisco perchè mi salva come immagine originale!!!  :-(

dove sbaglio??
tutti possiamo programmare...basta volerlo!!!

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 716
  • Respect: +151
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:salvare file modificato...
« Risposta #1 il: 08 Maggio 2015, 10:25:21 CEST »
0
Attenzione, questa istruzione

Codice (Java): [Seleziona]
canvas.drawBitmapMesh(bitmap, WIDTH, HEIGHT, verts, 0, null, 0, null);
non modifica il bitmap, ma lo traccia applicando le modifiche sul canvas.

Il bitmap originale resta invariato.

Per salvare le modifiche devi creare un nuovo bitmap, assegnarlo come target ad un canvas, applicare le modifiche:

Codice (Java): [Seleziona]
Canvas canvas = new Canvas();
//Creo un nuovo bitmap con le stesse dimensioni di "bitmap"
Bitmap mod = = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
//Imposto il nuovo bitmap come target del canvas
canvas.setBitmap(mod);
//Applico le modifiche a "bitmap" e scrivo il risultato in "mod"
canvas.drawBitmapMesh(bitmap, WIDTH, HEIGHT, verts, 0, null, 0, null);
//A questo punto devi salvare "mod" su file esterno

P.S.: Ho scritto il codice a memoria, potrebbe contenere errori ma il concetto è quello
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:salvare file modificato...
« Risposta #2 il: 08 Maggio 2015, 10:48:35 CEST »
0
grazie per la risposta.

ma quando salvo l'immagine modificata me la salva tutto in nero!!

questo è il cod. che ho scritto:

Codice (Java): [Seleziona]
int WIDTH;
int HEIGHT;
float[] verts;


Canvas canvas = new Canvas();
                //Creo un nuovo bitmap con le stesse dimensioni di "bitmap"
                Bitmap mod = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
                //Imposto il nuovo bitmap come target del canvas
                canvas.setBitmap(mod);         
                        //Applico le modifiche a "bitmap" e scrivo il risultato in "mod"
                canvas.drawBitmapMesh(bitmap, WIDTH, HEIGHT, verts, 0, null, 0, null);
                //A questo punto devi salvare "mod" su file esterno
           
                        File myDir = new File("/sdcard/");    
                        myDir.mkdirs();
                        //String fname = "Image-"+ n +".jpg";
                        File file = new File (myDir, "temporary_file.png");
                        if (file.exists ()) file.delete ();
                        //FileOutputStream fos;
                    try {
                        fos = new FileOutputStream(file);
                        mod.compress(CompressFormat.PNG, 100, fos);
                        fos.flush();
                        fos.close();
                    } catch (FileNotFoundException e) {
                        Log.e("GREC", e.getMessage(), e);
                    } catch (IOException e) {
                        Log.e("GREC", e.getMessage(), e);
                    }

come mai??  help!!!
tutti possiamo programmare...basta volerlo!!!

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 716
  • Respect: +151
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:salvare file modificato...
« Risposta #3 il: 08 Maggio 2015, 12:06:35 CEST »
0
Occhio che

Codice (Java): [Seleziona]
int WIDTH;
int HEIGHT;
float[] verts;

devono essere quelli definiti in MyView


Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:salvare file modificato...
« Risposta #4 il: 08 Maggio 2015, 12:58:47 CEST »
0
grazie mille risolto!!! :-)
tutti possiamo programmare...basta volerlo!!!