0

编辑 首先,我是 Android 新手,在画廊功能和操作方法方面没有太多把握,所以请耐心等待并指导我做错了什么。

场景我在网格视图(一种文件资源管理器)中设置我的应用程序照片。当我通过使用意图(请注意,这不是 Intent.ACTION_PICK)单击 gridview 中的某个文件夹来浏览并打开一些图像时,只需从一个活动移动到另一个活动并在 putString() 方法中传递单击项目的路径。到目前为止,它工作正常,但问题是我不知道如何检索有关 Uri、Bitmap 等的信息。

您能否指导我在这种情况下必须使用什么策略。在过去的 2 天里,我在 SO 看到了很多问题,但他们中的大多数都在使用图库 Action Pick 意图,并在 onActivityResult() 中获取结果,并使用 getData() 方法来检索有关拾取图像的信息。当我打开相机并使用 onActivityResult() 方法检索信息时,我也成功地执行了它,但这是不同的场景(至少对我作为初学者来说)请指导我正确的解决方法。我所拥有的只是在新活动中打开的特定图像的路径。

下面是活动代码,我曾经从我的 Gridview 活动中打开图像。

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfWriter;
import com.scanlibrary.ScanConstants;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import static com.itextpdf.text.Image.getInstance;

/**
 * Created by ADMIN on 6/23/2016.
 */
public class ImageOpenedActivity extends Activity {
    ImageView imageView;
    String received;
    private Button pdfConverter, openPDFConverter;
    String path;
    String outputPath;
    File openfile;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (savedInstanceState == null) {
            Bundle extras = getIntent().getExtras();
            if (extras == null) {
                received = null;
            }
            else {
                received = extras.getString("Image");

            }
        }
        else {
            received = (String) savedInstanceState.getSerializable("Image");

        }
        setContentView(R.layout.imageopened);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateTime = sdf.format(Calendar.getInstance().getTime()); // reading local time in the system

        pdfConverter = (Button) findViewById(R.id.PDF);
        openPDFConverter = (Button) findViewById(R.id.openPDF);
        imageView = (ImageView) findViewById(R.id.imageView);
        imageView.setImageURI(Uri.parse(received));
        outputPath = ScanConstants.IMAGE_PATH + File.separator + "PDF" + dateTime + ".pdf";
        Bitmap viewBitmap = Bitmap.createBitmap(400, 400, Bitmap.Config.ARGB_8888);//i is imageview whch u want to convert in bitmap
        Canvas canvas = new Canvas(viewBitmap);
        imageView.draw(canvas);
        Uri tempUri = getImageUri(getApplicationContext(), viewBitmap);

        // CALL THIS METHOD TO GET THE ACTUAL PATH
        File finalFile = new File(getRealPathFromURI(tempUri));
        path = String.valueOf(finalFile);


//openPDFConverter.setOnClickListener(new View.OnClickListener() {
//@Override
//public void onClick(View v) {
//        openfile = new File(outputPath);
//        Intent target = new Intent(Intent.ACTION_VIEW);
//        target.setDataAndType(Uri.fromFile(openfile), "application/pdf");
//        target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
//
//        Intent intent = Intent.createChooser(target, "Open File");
//        try {
//        startActivity(intent);
//        } catch (ActivityNotFoundException e) {
//        Log.e("Errorrrr ::::", outputPath);
//        }
//        }
//        });
//        // PDF Converter onclick method
//        pdfConverter.setOnClickListener(new View.OnClickListener() {
//@Override
//public void onClick(View view) {
//        // Will run the conversion in another thread to avoid the UI to be frozen
//        Thread t = new Thread() {
//public void run() {
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        String dateTime = sdf.format(Calendar.getInstance().getTime()); // reading local time in the system
//
//        // Input file
//        //inputPath = Environment.getExternalStorageDirectory() + File.separator + "test" + dateTime + ".jpg";
//
//        // Output file
//        //   outputPath = Environment.getExternalStorageDirectory() + File.separator + "PDF"+dateTime+".pdf";
//        outputPath = ScanConstants.IMAGE_PATH + File.separator + "PDF" + dateTime + ".pdf";
//
//        Log.e("Passed path is:::", path);
//// Run conversion
//final boolean result = ImageOpenedActivity.this.convertToPdf(path, outputPath);
//
//        // Notify the UI
//        runOnUiThread(new Runnable() {
//public void run() {
//        if (result) {
//        openPDFConverter.setVisibility(Button.VISIBLE);
//        Toast.makeText(ImageOpenedActivity.this, "The JPG was successfully converted to PDF.", Toast.LENGTH_SHORT).show();
//        }
//        else
//        Toast.makeText(ImageOpenedActivity.this, "An error occured while converting the JPG to PDF.", Toast.LENGTH_SHORT).show();
//        }
//        });
//        }
//        };
//        t.start();
//        }
//        });

    }


    public Uri getImageUri(Context inContext, Bitmap inImage) {
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        Log.e("Bitmap received ::::", String.valueOf(inImage));
        //inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
        Log.e("getImageURI path:", String.valueOf(path));

        return Uri.parse(path);
    }


    public String getRealPathFromURI(Uri uri) {
        Cursor cursor = getContentResolver().query(uri, null, null, null, null);
        cursor.moveToFirst();
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        Log.e("getRealPathFromURI:::", String.valueOf(uri));
        Log.e("URI received", String.valueOf(uri));
        return cursor.getString(idx);
    }

    public boolean convertToPdf(String jpgFilePath, String outputPdfPath) {
        try {
            // Check if Jpg file exists or not
            File inputFile = new File(jpgFilePath);
            if (!inputFile.exists()) {
                Log.e("Input File::", String.valueOf(inputFile));
                throw new Exception("File '" + jpgFilePath + "' doesn't exist.");
            }

            // Create output file if needed
            File outputFile = new File(outputPdfPath);
            if (!outputFile.exists()) {
                outputFile.createNewFile();
                Log.e("Output File::", String.valueOf(outputFile));

            }

            Document document = new Document();
            PdfWriter.getInstance(document, new FileOutputStream(outputFile));
            document.open();

            com.itextpdf.text.Image image = getInstance(jpgFilePath);
            image.setAbsolutePosition(0, 0);
            image.scaleAbsolute((float) 2549 * (float) .24, (float) 3304 * (float) .24);
            image.scaleToFit((float) 2549 * (float) .24, (float) 3304 * (float) .24);
            document.add(image);
            Log.e("After document added::", String.valueOf(image));

            document.close();

            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return false;
    }   
    }
4

0 回答 0