Ich möchte eine Android-App schreiben, die im Grunde eine Bildüberlagerung auf einem anderen Bild überlagert, und dann möchte ich das Bild mit der Überlagerung als JPG oder PNG speichern. Im Grunde ist dies die gesamte Ansicht, die ich speichern möchte.
Beispielcode wäre sehr hilfreich.
BEARBEITEN:
Ich habe Ihre Vorschläge ausprobiert und erhalte einen Nullzeiger auf die Starred Line.
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.os.Bundle;
import android.os.Environment;
import android.widget.LinearLayout;
import android.widget.TextView;
public class EditPhoto extends Activity {
/** Called when the activity is first created. */
LinearLayout ll = null;
TextView tv = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.text);
ll = (LinearLayout) findViewById(R.id.layout);
ll.setDrawingCacheEnabled(true);
Bitmap b = ll.getDrawingCache();
File sdCard = Environment.getExternalStorageDirectory();
File file = new File(sdCard, "image.jpg");
FileOutputStream fos;
try {
fos = new FileOutputStream(file);
*** b.compress(CompressFormat.JPEG, 95,fos);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Nichts dabei? Ich weiß, dass es möglich ist, ich habe es in anderen Apps gesehen.
– Shaneburg
25. Juni 10 um 4:41 Uhr
Können Sie uns einen Code geben, der beschreibt, wie Sie die Bearbeitung vornehmen?
– Chris Thompson
19. August 2010 um 20:36 Uhr
Im Moment ist es eher eine Idee, aber ich werde nur eine Bildansicht über die Foto-Bildansicht legen. Es sei denn, es gibt einen besseren Weg, dies zu tun.
– Shaneburg
19. August 2010 um 20:38 Uhr
Möchten Sie das Bild mit den Ebenen (ala PSD) oder nur als flaches Bild (ala png) speichern?
– Chris Thompson
19. August 10 um 20:59 Uhr
Ein flaches PNG oder JPG wäre in Ordnung.
– Shaneburg
19. August 10 um 22:31 Uhr
Sie können den Zeichnungscache einer Ansicht nutzen.
view.setDrawingCacheEnabled(true);
Bitmap b = view.getDrawingCache();
b.compress(CompressFormat.JPEG, 95, new FileOutputStream("/some/location/image.jpg"));
Wo Ansicht ist Ihre Ansicht. Die 95 ist die Qualität der JPG-Komprimierung. Und genau das ist der Dateiausgabestrom.
Ich habe Ihren Code ausprobiert, aber wo beginnt der Stamm für den FileOutputStream? weil ich versucht habe, in den Ordnern des Emulators nachzusehen und das gespeicherte Bild nicht finden konnte …
– Sephi
21. August 10 um 12:21 Uhr
Es beginnt im Root des Telefons. Wenn Sie also etwas von der SD-Karte laden möchten, verwenden Sie Environment.getExternalStorageDirectory(), um den Stamm für die SD-Karte zu erhalten.
– Monkader
21. August 2010 um 15:38 Uhr
Kann also in diesem Fall ein LinerLayout die Ansicht sein und wird das etwas im LinearLayout erfassen?
– Shaneburg
23. August 10 um 21:16 Uhr
Es sieht so aus, als ob es funktioniert, danke und an Sie geht fast mein gesamter Repräsentant :). Danke Leute!!
– Shaneburg
24. August 10 um 1:38 Uhr
Ich habe mein Problem behoben. Siehe meine Lösung hier
– kirsche40
23. April 14 um 11:25 Uhr
File sdCard = Environment.getExternalStorageDirectory();
File file = new File(sdCard, "image.jpg");
FileOutputStream fos = new FileOutputStream(file);
Verwenden Sie fos reference als dritten Parameter der Methode b.compress() in der Antwort von Moncader. Das Bild wird als image.jpg im Stammverzeichnis Ihrer SD-Karte gespeichert.
Harikesch
Speichern Sie RelativeLayout oder eine beliebige Ansicht als Bild (.jpg)
String getSaveImageFilePath() {
File mediaStorageDir = new File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), YOUR_FOLDER_NAME);
// Create a storage directory if it does not exist
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d(YOUR_FOLDER_NAME, "Failed to create directory");
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageName = "IMG_" + timeStamp + ".jpg";
String selectedOutputPath = mediaStorageDir.getPath() + File.separator + imageName;
Log.d(YOUR_FOLDER_NAME, "selected camera path " + selectedOutputPath);
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
int maxSize = 1080;
int bWidth = bitmap.getWidth();
int bHeight = bitmap.getHeight();
if (bWidth > bHeight) {
int imageHeight = (int) Math.abs(maxSize * ((float)bitmap.getWidth() / (float) bitmap.getHeight()));
bitmap = Bitmap.createScaledBitmap(bitmap, maxSize, imageHeight, true);
} else {
int imageWidth = (int) Math.abs(maxSize * ((float)bitmap.getWidth() / (float) bitmap.getHeight()));
bitmap = Bitmap.createScaledBitmap(bitmap, imageWidth, maxSize, true);
}
view.setDrawingCacheEnabled(false);
view.destroyDrawingCache();
OutputStream fOut = null;
try {
File file = new File(selectedOutputPath);
fOut = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
fOut.flush();
fOut.close();
} catch (Exception e) {
e.printStackTrace();
}
return selectedOutputPath;
}
.
7085200cookie-checkAndroid-Ansicht als JPG oder PNG speichernyes
Nichts dabei? Ich weiß, dass es möglich ist, ich habe es in anderen Apps gesehen.
– Shaneburg
25. Juni 10 um 4:41 Uhr
Können Sie uns einen Code geben, der beschreibt, wie Sie die Bearbeitung vornehmen?
– Chris Thompson
19. August 2010 um 20:36 Uhr
Im Moment ist es eher eine Idee, aber ich werde nur eine Bildansicht über die Foto-Bildansicht legen. Es sei denn, es gibt einen besseren Weg, dies zu tun.
– Shaneburg
19. August 2010 um 20:38 Uhr
Möchten Sie das Bild mit den Ebenen (ala PSD) oder nur als flaches Bild (ala png) speichern?
– Chris Thompson
19. August 10 um 20:59 Uhr
Ein flaches PNG oder JPG wäre in Ordnung.
– Shaneburg
19. August 10 um 22:31 Uhr