我正在拍摄图像并使用画布将其绘制到屏幕上。我想根据屏幕尺寸缩放它。
这是我尝试过的,但它切断了图像的一大块:
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.myimage);
bitmap = Bitmap.createScaledBitmap(bitmap, width, height, false);
Rect frameToDraw = new Rect(0, 0, width, height);
RectF whereToDraw = new RectF(0, 0, width, height);
canvas.drawBitmap(bitmap,frameToDraw,whereToDraw, paint);
Run Code Online (Sandbox Code Playgroud)
我知道我做错了一些事情,但我不确定到底是什么。此代码会导致图像超出屏幕尺寸。我希望它能够缩放到屏幕的大小。我还将绘制较小的图像,我还需要根据屏幕的大小进行缩放,但不是全屏。
我正在尝试在从外部源接收到字节后Bitmap使用 Android创建一个。Bitmap.Config.ARGB_8888据我了解,在 a 中设置原始字节Bitmap(不使用JNI)的最快方法是使用该copyPixelsFromBuffer()方法,但是出现了关于该缓冲区中字节的正确顺序的问题。
经过一番尝试和错误后,尽管事实上Config.ARGB_8888表明了正确的顺序,ARGB但似乎使用的内部格式Bitmap是RGBA. Activity您可以在ie中使用以下方法来测试此行为onCreate()(我已经在 Android 4.4.4 中测试了它,该方法确实进行了测试,copyPixelsToBuffer()但根据我的测试,copyPixelsFromBuffer()其行为是相同的):
private void testBitmap() {
// one pixel bitmap
Bitmap bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
// as per javadoc, the int value is in ARGB format, so A=0xFF, R=0x11, G=0x22, B=0x33
bitmap.setPixel(0, 0, 0xFF112233);
ByteBuffer buffer = ByteBuffer.allocateDirect(4); // 4 bytes for the single pixel
bitmap.copyPixelsToBuffer(buffer);
buffer.position(0); …Run Code Online (Sandbox Code Playgroud) 使用 Jcodec 库,我成功地从 Bitmap 对象数组生成视频文件并将其存储在 Android 文件系统上。
然而,编码时间太长。我考虑过缩小每个位图以加快速度,但这似乎不起作用。尽管进行了广泛的研究,我还是很难找到有用的答案。
下面的代码目前是我创建位图的方式,其中canvasView.getWidth()和分别canvasView.getHeight()对应于1920 x 1280。
public Bitmap loadBitmapFromView(View v) {
Bitmap b = Bitmap.createBitmap(canvasView.getWidth(), canvasView.getHeight(), Bitmap.Config.RGB_565);
Log.i("Downloading", "OWidth: " + b.getWidth() + " --- " + "OHeight: " + b.getHeight());
Canvas c = new Canvas(b);
c.drawColor(Color.WHITE); // Essential
v.draw(c);
v.invalidate();
v.requestLayout();
return b;
}
Run Code Online (Sandbox Code Playgroud)
我注意到当你将这两个参数更改为较小的值时,IE:
Bitmap.createBitmap(256, 256, Bitmap.Config.RGB_565);
Run Code Online (Sandbox Code Playgroud)
编码速度显着加快。
整个视图的大小是1920 x 1280,因此createBitmap上面显示的方法只能捕获窗口的一小部分(256 x 256),这不是我所需要的。
我需要帮助找到一种更有效地将位图数组编码为视频的方法,或者使用我正在使用的相同方法,但缩小每个位图,同时保持整个图像的可见性并加快编码过程。
我正在使用相机 api 来捕获身份证照片,我有一个叠加层,如下图所示。我想裁剪框中的图像。你能建议一下具体应该如何做吗?我已经写下了我所尝试过的以及它给我的结果。
这是我想要捕获的 id 的屏幕截图..
输出。
白色矩形框是一个相框,位于相对布局的中心
<View
android:id="@+id/photo_frame"
android:layout_width="match_parent"
android:layout_height="212dp"
android:background="@drawable/bg_photo_frame"
android:layout_centerInParent="true"
android:layout_margin="@dimen/double_padding"
android:visibility="visible"/>
Run Code Online (Sandbox Code Playgroud)
如何计算这个帧来剪切图像
这就是我必须剪切需要修改的图像,但不确定前进的方向是什么
public Bitmap cutImage(final Bitmap srcBmp, final int pixepWidth, final int pixelsHeight, float widthRatio) {
// Bitmap croppedBitmap = Bitmap.createBitmap(bitmap, 20, 20, pixepWidth, pixelsHeight);
// return croppedBitmap;
Bitmap dstBmp;
if (srcBmp.getWidth() >= srcBmp.getHeight()){
dstBmp = Bitmap.createBitmap(
srcBmp,
srcBmp.getWidth()/2 - srcBmp.getHeight()/2,
0,
srcBmp.getHeight(),
srcBmp.getHeight()
);
}else{
dstBmp = Bitmap.createBitmap(
srcBmp,
0,
srcBmp.getHeight()/2 - srcBmp.getWidth()/2,
srcBmp.getWidth(),
srcBmp.getWidth()
);
}
return dstBmp;
}
Run Code Online (Sandbox Code Playgroud) android bitmap android-camera android-bitmap android-camera2
你好,我正在文件中添加一个位图来解析平台,但一开始遇到了一些麻烦,它工作正常,但在第二次或第三次尝试后我搞砸了。我想这是因为 put 方法不接收位图。但我不知道为什么它一开始有效,然后就停止了。
\n\n这是我的代码...
\n\n package com.example.mac.mycarapp.UI;\n\nimport android.support.v7.app.ActionBar;\nimport android.app.Activity;\nimport android.app.AlertDialog;\nimport android.content.Context;\nimport android.content.DialogInterface;\nimport android.content.Intent;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.drawable.BitmapDrawable;\nimport android.net.Uri;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.os.Environment;\nimport android.provider.MediaStore;\nimport android.support.annotation.Nullable;\nimport android.support.v4.content.FileProvider;\nimport android.support.v7.app.AppCompatActivity;\nimport android.support.v7.widget.DividerItemDecoration;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.support.v7.widget.SearchView;\nimport android.util.Log;\nimport android.view.LayoutInflater;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.widget.AdapterView;\nimport android.widget.ArrayAdapter;\nimport android.widget.Button;\nimport android.widget.EditText;\nimport android.widget.ImageView;\nimport android.widget.ScrollView;\nimport android.widget.Spinner;\nimport android.widget.TextView;\nimport android.widget.Toast;\nimport android.support.v7.widget.Toolbar;\nimport com.example.mac.mycarapp.Adapter.DatosCompletosOtroAdapterSearch;\nimport com.example.mac.mycarapp.Adapter.RecyclerTouchListener;\nimport com.example.mac.mycarapp.LoginActivity;\nimport com.example.mac.mycarapp.Modelos.Ciudad;\nimport com.example.mac.mycarapp.R;\nimport com.example.mac.mycarapp.Util.Config;\nimport com.example.mac.mycarapp.Util.MarshMallowPermission;\nimport com.parse.FindCallback;\nimport com.parse.GetCallback;\nimport com.parse.GetDataCallback;\nimport com.parse.ParseException;\nimport com.parse.ParseFile;\nimport com.parse.ParseObject;\nimport com.parse.ParseQuery;\nimport com.parse.ParseUser;\nimport com.parse.SaveCallback;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.File;\nimport java.io.FileNotFoundException;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport de.hdodenhof.circleimageview.CircleImageView;\n\n\npublic class DatosCompletosClienteOtro extends AppCompatActivity implements AdapterView.OnItemSelectedListener {\n\n @BindView(R.id.imagen_por_tipo_de_empresa)\n ImageView imagenPorTipoDeEmpresa;\n @BindView(R.id.circleImageView3)\n …Run Code Online (Sandbox Code Playgroud) error-handling android parse-platform android-bitmap parse-android-sdk
有没有办法彻底改变ImageViewAndroid中的颜色?我试过用
imageView.getDrawable().setColorFilter(new PorterDuffColorFilter(0xFFF7962F, PorterDuff.Mode.MULTIPLY));
Run Code Online (Sandbox Code Playgroud)
和
imageView.setColorFilter(0xFFDDDDDD, PorterDuff.Mode.MULTIPLY);
Run Code Online (Sandbox Code Playgroud)
在ImageView一个灰色的图像上绘制,但他们只在现有的灰色上添加了一种颜色,使它看起来有点奇怪.
在iOS上你可以做到
[imageView setImage:[[UIImage imageNamed:@"my_image"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
imageView.tintColor = [UIColor redColor];
Run Code Online (Sandbox Code Playgroud)
它将完全删除用于渲染的任何颜色,并用UIImageView指定的颜色替换"骨架"图像.也许是因为色调总是具有alpha透明度?我确实0xFF在alpha部分指定了.
我对Picasso库缩放有严重问题.问题是我有一个由3个主视图和一些按钮组成的布局.意见如下:
ImageView 50%mapView 20%EditTextView 30%
我想在不留空白的情况下将未知分辨率的图片加载到该imageView中.我试图使用.fit().centerInside,但只留下两侧的空白区域.这就是我的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_below="@+id/photo1"
android:weightSum="10">
<ImageView
android:id="@+id/photo1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="5"
android:background="#75aea7ab" />
<com.google.android.gms.maps.MapView
android:id="@+id/map2"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="2" />
<EditText
android:id="@+id/edittext"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_marginBottom="15dp"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginTop="15dp"
android:layout_weight="3"
android:background="#00000000"
android:gravity="top|left"
android:inputType="textMultiLine"
android:textColor="#ff000000"
android:textSize="15sp" />
</LinearLayout>
<ImageButton
android:id="@+id/post"
android:layout_width="@dimen/fab_button_diameter"
android:layout_height="@dimen/fab_button_diameter"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_gravity="end"
android:layout_marginBottom="300dp"
android:background="@drawable/fab_shape"
android:src="@drawable/forward"
android:text="Post!"
android:tint="@android:color/white" />
<Button
android:id="@+id/camera"
android:layout_width="72dp"
android:layout_height="72dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="75dp"
android:layout_marginTop="100dp"
android:background="@drawable/camera" />
<Button
android:id="@+id/gallery"
android:layout_width="72dp"
android:layout_height="72dp"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginRight="75dp"
android:layout_marginTop="100dp"
android:background="@drawable/gallery" …Run Code Online (Sandbox Code Playgroud) 我正在关注这个例子:
package com.mtsahakis.mediaprojectiondemo;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.PixelFormat;
import android.graphics.Point;
import android.hardware.display.DisplayManager;
import android.hardware.display.VirtualDisplay;
import android.media.Image;
import android.media.ImageReader;
import android.media.projection.MediaProjection;
import android.media.projection.MediaProjectionManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.OrientationEventListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
public class ScreenCaptureImageActivity extends Activity {
private static final String TAG = ScreenCaptureImageActivity.class.getName();
private static final int REQUEST_CODE = 100;
private static String …Run Code Online (Sandbox Code Playgroud) 我为Android Wear制作了Watch Face.
但问题是图像缩放.当我调整大小时,背景,标记和小工具的图像质量会降低.
例如,我将480x480背景图像放在drawable-nodpi文件夹中(我也尝试过其他dpi),我将它重新缩放为:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = true;
Bitmap bgImage = BitmapFactory.decodeResource(context.getResources(), R.drawable.ticks_1, options);
bgImage = Bitmap.createScaledBitmap(bgImage , width, height, false);
Run Code Online (Sandbox Code Playgroud)
这是图像:
这就是我对手表的看法:
我在调整大小时做错了什么?
我想从我的画廊中选择一个视频.它工作正常.但现在我想显示一个Bitmap,作为缩略图.我厌倦了这段代码,它不起作用,它总是说:NullPointerException
Bitmap bitmap2 = ThumbnailUtils.createVideoThumbnail(uri.getPath, MediaStore.Video.Thumbnails.MICRO_KIND);
Run Code Online (Sandbox Code Playgroud)
这都在onActivityResult中.
如何从视频Uri中获取位图?
谢谢你的帮助
android ×10
android-bitmap ×10
bitmap ×2
canvas ×1
encoding ×1
image ×1
picasso ×1
thumbnails ×1
video ×1
wear-os ×1