标签: android-bitmap

Android:如何使用画布/绘制位图缩放位图以适合屏幕尺寸?

我正在拍摄图像并使用画布将其绘制到屏幕上。我想根据屏幕尺寸缩放它。

这是我尝试过的,但它切断了图像的一大块:

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)

我知道我做错了一些事情,但我不确定到底是什么。此代码会导致图像超出屏幕尺寸。我希望它能够缩放到屏幕的大小。我还将绘制较小的图像,我还需要根据屏幕的大小进行缩放,但不是全屏。

android canvas android-canvas android-bitmap

5
推荐指数
1
解决办法
1万
查看次数

Android的ARGB_8888位图内部格式总是RGBA吗?

我正在尝试在从外部源接收到字节后Bitmap使用 Android创建一个。Bitmap.Config.ARGB_8888据我了解,在 a 中设置原始字节Bitmap(不使用JNI)的最快方法是使用该copyPixelsFromBuffer()方法,但是出现了关于该缓冲区中字节的正确顺序的问题。

经过一番尝试和错误后,尽管事实上Config.ARGB_8888表明了正确的顺序,ARGB但似乎使用的内部格式BitmapRGBA. 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)

android android-bitmap

5
推荐指数
1
解决办法
4015
查看次数

有效地将位图数组转换为视频

使用 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),这不是我所需要的。

我需要帮助找到一种更有效地将位图数组编码为视频的方法,或者使用我正在使用的相同方法,但缩小每个位图,同时保持整个图像的可见性并加快编码过程。

encoding android bitmap android-canvas android-bitmap

5
推荐指数
1
解决办法
4937
查看次数

在 Android 中基于叠加裁剪位图 - Camera API 2

我正在使用相机 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

5
推荐指数
1
解决办法
2868
查看次数

java.lang.IllegalArgumentException:值的类型无效:类 android.graphics.Bitmap

你好,我正在文件中添加一个位图来解析平台,但一开始遇到了一些麻烦,它工作正常,但在第二次或第三次尝试后我搞砸了。我想这是因为 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

5
推荐指数
1
解决办法
6669
查看次数

使用浅色完全更改Android ImageView的颜色

有没有办法彻底改变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部分指定了.

android android-drawable android-bitmap

4
推荐指数
1
解决办法
2990
查看次数

Android毕加索缩放照片更大或适合imageView(无空白区域)

我对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)

android android-layout picasso android-bitmap

4
推荐指数
1
解决办法
1812
查看次数

拍摄截图周围的黑色边缘

我正在关注这个例子:

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 android-bitmap android-mediaprojection

4
推荐指数
1
解决办法
890
查看次数

位图缩放会破坏质量

我为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)

这是图像:

背景 在此输入图像描述

这就是我对手表的看法:

截图

我在调整大小时做错了什么?

android image image-resizing android-bitmap wear-os

4
推荐指数
1
解决办法
3601
查看次数

从Uri获取视频缩略图

我想从我的画廊中选择一个视频.它工作正常.但现在我想显示一个Bitmap,作为缩略图.我厌倦了这段代码,它不起作用,它总是说:NullPointerException

Bitmap bitmap2 = ThumbnailUtils.createVideoThumbnail(uri.getPath, MediaStore.Video.Thumbnails.MICRO_KIND);
Run Code Online (Sandbox Code Playgroud)

这都在onActivityResult中.

如何从视频Uri中获取位图?

谢谢你的帮助

video android thumbnails android-bitmap

4
推荐指数
3
解决办法
8892
查看次数