Java 位图图像保存
这部分代码是创建位图图像的地方,位图位于画布上,从这一点来看,我希望能够保存在位图上创建的图像,我在MainActivity中有一个带有“保存”选项的下拉菜单Java 位图图像保存,java,Java,这部分代码是创建位图图像的地方,位图位于画布上,从这一点来看,我希望能够保存在位图上创建的图像,我在MainActivity中有一个带有“保存”选项的下拉菜单 }我使用此代码保存使用画布绘制的任何图形,如fingerpaint或类似工具,希望对您的案例有用 将实例设置为全局 package com.example.save_file; import java.io.File; import java.io.FileOutputStream; import java.util.Random;
}我使用此代码保存使用画布绘制的任何图形,如fingerpaint或类似工具,希望对您的案例有用 将实例设置为全局
package com.example.save_file;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Random;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.view.Menu;
//import android.gesture.GestureOverlayView;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
MyDraw d = new MyDraw (this);
setContentView (d);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu (menu);
MenuItem menu1 = menu.add(0, 0, Menu.NONE, "Filled Shape");
MenuItem menu2 = menu.add(0, 1, Menu.NONE, "Outline Shape");
MenuItem menu3 = menu.add(0, 2, Menu.NONE, "Rectangle");
MenuItem menu4 = menu.add(0, 3, Menu.NONE, "Oval");
MenuItem menu5 = menu.add(0, 4, Menu.NONE, "Save!");
return true;
}
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case 0:
MyApp.fill = 0;
return true;
case 1:
MyApp.fill = 1;
return true;
case 2:
MyApp.shape = 0;
return true;
case 3:
MyApp.shape = 1;
return true;
default:
return super.onOptionsItemSelected(item);
case 4:
bmp.setDrawingCacheEnabled(true);
Bitmap bitmap = bmp.getDrawingCache();
File root = Environment.getExternalStorageDirectory();
File file = new
File(root.getAbsolutePath()+"/DCIM/Camera/img.jpg");
try
{
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
bitmap.compress(CompressFormat.JPEG, 100, ostream);
ostream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
并将其放在OnOptions ItemSelected()的示例中
更新:
检查您的模拟设备是否具有SD卡
提醒您必须将权限添加到清单
case 4:
try {
Bitmap bitmap = Bitmap.createBitmap(d.getWidth(),d.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
d.draw(canvas);
File folder = new File(Environment.getExternalStorageDirectory()+ "/DCIM/Camera/");
if (!folder.exists())
folder.mkdirs();
String fileName = Environment.getExternalStorageDirectory()+ "/DCIM/Camera/img.jpg"";
if (new File(fileName).exists())
new File(fileName).delete();
OutputStream stream = new FileOutputStream(fileName);
/*
* Write bitmap to file using JPEG or PNG and 100% quality hint
* for JPEG.
*/
bitmap.compress(CompressFormat.JPEG, 100, stream);
stream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
Toast.makeText(this, "Error: " + e.getMessage(),Toast.LENGTH_LONG).show();
}
break;
谢谢,我想从你对它添加的评论来看。不,是在MainActivity中,我给你的所有代码都不在myDraw中。Java我已经完成了所有这些,但是我只有一个模拟器和一个没有sd卡的HTC模拟器,你有你的模拟器吗?选择“保存”按钮后,会出现一条错误消息,错误:/storage/emulated/0/DCIM/Camera/img:open failed:EACCES(权限被拒绝)感谢您的帮助。我现在已经完成了所有这些,但是找不到文件,我已经进入DDMS模式,找到sd卡,但它似乎没有打开。感谢您的帮助:)使用adb shell,打开模拟器,在windows中打开cmd并键入:adb shell
cd/mnt
ls
并搜索sdcard,可以是sdcard、extSdCard或其他,我支持sdcard,然后键入:cd sdcard
ls
,它会将所有文件显示到sdcard中,转到DCIM/camera:cd DCIM/camera
ls
,您的照片将出现在那里。这太棒了,我非常感谢您的帮助!谢谢
package com.example.save_file;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Random;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.view.Menu;
//import android.gesture.GestureOverlayView;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
MyDraw d = new MyDraw (this);
setContentView (d);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu (menu);
MenuItem menu1 = menu.add(0, 0, Menu.NONE, "Filled Shape");
MenuItem menu2 = menu.add(0, 1, Menu.NONE, "Outline Shape");
MenuItem menu3 = menu.add(0, 2, Menu.NONE, "Rectangle");
MenuItem menu4 = menu.add(0, 3, Menu.NONE, "Oval");
MenuItem menu5 = menu.add(0, 4, Menu.NONE, "Save!");
return true;
}
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case 0:
MyApp.fill = 0;
return true;
case 1:
MyApp.fill = 1;
return true;
case 2:
MyApp.shape = 0;
return true;
case 3:
MyApp.shape = 1;
return true;
default:
return super.onOptionsItemSelected(item);
case 4:
bmp.setDrawingCacheEnabled(true);
Bitmap bitmap = bmp.getDrawingCache();
File root = Environment.getExternalStorageDirectory();
File file = new
File(root.getAbsolutePath()+"/DCIM/Camera/img.jpg");
try
{
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
bitmap.compress(CompressFormat.JPEG, 100, ostream);
ostream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
MyDraw d;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
d = new MyDraw (this);
setContentView (d);
}
case 4:
try {
Bitmap bitmap = Bitmap.createBitmap(d.getWidth(),d.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
d.draw(canvas);
File folder = new File(Environment.getExternalStorageDirectory()+ "/DCIM/Camera/");
if (!folder.exists())
folder.mkdirs();
String fileName = Environment.getExternalStorageDirectory()+ "/DCIM/Camera/img.jpg"";
if (new File(fileName).exists())
new File(fileName).delete();
OutputStream stream = new FileOutputStream(fileName);
/*
* Write bitmap to file using JPEG or PNG and 100% quality hint
* for JPEG.
*/
bitmap.compress(CompressFormat.JPEG, 100, stream);
stream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
Toast.makeText(this, "Error: " + e.getMessage(),Toast.LENGTH_LONG).show();
}
break;
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />