我一直在开发一个摄像头应用程序,所有的工作都是拍摄和保存照片。但我希望在拍摄照片时显示的Imageview能够保存在实际拍摄的照片中。可能吗?
现在,我一直试图让图像视图与我绘制相机预览的布局相同。
<FrameLayout
android:id="@+id/camera_preview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
>
<ImageView
android:layout_width="50pt"
android:layout_height="50pt"
android:layout_gravity="center"
android:src="@android:drawable/star_big_on"
/>
</FrameLayout>
我想,也许如果它画在与相机相同的视图上,那么它也会看到图像和照片。
有没有人知道这是否可能,或者我必须采取另一种方法?如果是这样,链接到其他解决方案如何做到这一点将不胜感激:)
谢谢
编辑:我一直遵循这个相机教程http://developer.android.com/guide/topics/media/camera.html#manifest如果有人想知道我如何保存图片等
Edit2:为了澄清,我希望在你拍摄后,这个例子中的星星能在照片中显示出来。所以,如果我拍了一张墙的照片,我希望当你在画廊里看照片时,星星会出现在墙上,就像拍照片时一样!
也许叠加方法可以帮助你。捕获图像后,将其转换为位图,然后将捕获图像和要保存的图像发送到此方法:
private Bitmap overlay(Bitmap bmp1, Bitmap bmp2) {
Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig());
Canvas canvas = new Canvas(bmOverlay);
canvas.drawBitmap(bmp1, new Matrix(), null);
canvas.drawBitmap(bmp2, new Matrix(), null);
return bmOverlay;
}
希望能解决你的问题。
我会这样做的。为我工作:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE) {
if (resultCode == getActivity().RESULT_OK) {
// successfully captured the image
// display it in image view
previewCapturedImage();
} else if (resultCode == getActivity().RESULT_CANCELED) {
// user cancelled Image capture
Toast.makeText(getActivity().getApplicationContext(), "User cancelled image capture", Toast.LENGTH_SHORT).show();
} else {
// failed to capture image
Toast.makeText(getActivity().getApplicationContext(),"Sorry! Failed to capture image", Toast.LENGTH_SHORT).show();
}
}
}
private void previewCapturedImage() {
try {
// bitmap factory
BitmapFactory.Options options = new BitmapFactory.Options();
// downsizing image as it throws OutOfMemory Exception for larger
// images
options.inSampleSize = 8;
final Bitmap bitmap = BitmapFactory.decodeFile(imageUri.getPath(),options);
toto.setImageBitmap(bitmap);
shareCapturedImage();
} catch (NullPointerException e) {
e.printStackTrace();
cam.release();
}
}
private void shareCapturedImage() {
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/*");
share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(mediaFile));
startActivity(Intent.createChooser(share,"Share with:"));
}
别忘了在onCreative方法中声明ImageView,如下所示:
ImageView img = (ImageView) rootView.findViewById(R.id.img);
xml与此类似:
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true" />
希望这有帮助:)
您真正想要的是一个可分层绘制的-
管理其他Drawable数组的Drawable。这些是按数组顺序绘制的,因此具有最大索引的元素将绘制在顶部。
您有两种选择可以使用LayerDrawable
。您可以在单独的可绘制xml中定义它,然后在ImageView
中简单地设置图像,也可以在代码中动态配置一个LayerDrawable
。然而,由于您希望动态地实现这一点,因此需要下面提到的编程方法。
以编程方式使用代码
您需要将您的位图(您必须在捕获图片后获得)转换为可绘制的代码。对于这样使用BitmapDrawable
:
Resources r = getResources();
Drawable d = new BitmapDrawable(r,yourBitmap);//converting bitmap to drawable
Drawable[] layers = new Drawable[2];
layers[0] = d;
layers[1] = r.getDrawable(R.drawable.star_big_on);
LayerDrawable layerDrawable = new LayerDrawable(layers);
imageView.setImageDrawable(layerDrawable);
现在,您的ImageView
上设置了两个图像(1.您拍摄的图像和2.star\u big\u on)。
编辑
由于您希望将新创建的图像(其中添加了两个图像)存储在库中,您可以执行以下操作来存储图像:
int width = layerDrawable.getIntrinsicWidth();
int height = layerDrawable.getIntrinsicHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
layerDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
layerDrawable.draw(canvas);
//and then the following line will store it in the gallery
MediaStore.Images.Media.insertImage(getContentResolver(), bitmap , "yourTitle" , "yourDescription");
现在,通过像上面这样做,您的图像将被添加到画廊的末尾。如果您希望它存储在库的开始部分,请引用此代码。
如果您希望在单击照片后存储在图库中的原始图像从图库中删除,您可以参考此问题。在这个问题中,您将看到类似于文件的内容。getPath()
,它只是要删除的所需映像的路径。因此,如果您想获得捕获图像的路径,请参考此So问题。希望你现在有了所有的想法来实现你真正想要的。
注意:如果您想知道如何通过XML使用LayerDrawable
使用XML
创建一个新的Drawable XML文件,我们称之为mylayer.xml:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/yourcapturedimage" />
<item android:drawable="@drawable/star_big_on" />
</layer-list>
现在,在您的活动中
使用该可绘制
设置图像:
imageView.setImageDrawable(getResources().getDrawable(R.layout.mylayer));
所以我遇到了一个问题,前面在我提问的问题中提到过:将图像(ACTION_image_CAPTURE)上载到Firebase存储 我对这个问题进行了更多的搜索,并应用了Android Studio文档:https://developer.android.com/training/camera/photobasics.html#TaskPhotoView 所以,在您阅读代码之前,我基本上想说一下需要什
本文向大家介绍Android调用系统照相机拍照与摄像的方法,包括了Android调用系统照相机拍照与摄像的方法的使用技巧和注意事项,需要的朋友参考一下 前言 在很多场景中,都需要用到摄像头去拍摄照片或视频,在照片或视频的基础之上进行处理。但是Android系统源码是开源的,很多设备厂商均可使用,并且定制比较混乱。一般而言,在需要用到摄像头拍照或摄像的时候,均会直接调用系统现有的相机应用,去进行
我正在开发一个应用程序,在这个应用程序中,我以纵向方向拍摄照片,问题是当我稍后检索图像时,它是横向方向的(图片已逆时针旋转90度)。我曾经在课下使用过,但这里每次都是0(零)。所以,我不知道怎么解决它。
在我的应用程序中,用户从相机捕获图像或从图库中选择图像,然后将其转换为pdf并上载到服务器,现在我的问题是,从相机捕获的图像在某些设备上旋转,我有代码尝试解决此问题,但它不起作用 任何建议或问题在哪里,没有错误代码或任何东西
问题内容: 我环顾四周,但似乎并没有解决这个非常恼人的问题的可靠答案。 我以纵向拍摄照片,然后单击“保存/放弃”,按钮也以正确的方向放置。问题是当我随后在横向上检索图像时(图像已逆时针旋转90度) 我不想强迫用户以特定方向使用相机。 有没有办法检测照片是否以人像模式拍摄,然后解码位图并将其向上翻转? 问题答案: 照片始终以相机内置在设备中的方向拍摄。为了使图像正确旋转,您必须读取存储在图片中的方向
我是Android Studio的新手。我想通过点击按钮用手机摄像头拍摄照片,然后显示拍摄的照片,照片将自动保存在手机图库中。我在网上找到了一些例子,但我拍摄的照片没有保存在图库中。我已经使用了下面的代码。我能得到一些帮助吗?