GVKun编程网logo

c# – 如何从类型Image转换为类型BitmapImage?(c# image转byte)

5

如果您对c#–如何从类型Image转换为类型BitmapImage?和c#image转byte感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解c#–如何从类型Image转换为类型BitmapIm

如果您对c# – 如何从类型Image转换为类型BitmapImage?c# image转byte感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解c# – 如何从类型Image转换为类型BitmapImage?的各种细节,并对c# image转byte进行深入的分析,此外还有关于Android ImageView setImageBitmap 不显示图片、android – ImageView setImageBitmap无法在某些设备上运行、android – 由setImageBitmap()设置时,ImageView不会显示图像、android-imageView.setImageBitmap(Bitmap)极大地减慢了我的应用程序的实用技巧。

本文目录一览:

c# – 如何从类型Image转换为类型BitmapImage?(c# image转byte)

c# – 如何从类型Image转换为类型BitmapImage?(c# image转byte)

有谁知道如何从图像创建Bitmap Image?这是我正在使用的代码:
MemoryStream memStream = new MemoryStream(bytes);
Image img = Image.FromStream(memStream);

现在我可以在内存中访问此图像.问题是我需要将其转换为类型BitmapImage才能在我的解决方案中使用它.

注意:我需要将其转换为类型BitmapImage而不是类型Bitmap.我无法弄明白,因为类型BitmapImage为它的构造函数接受了一个Uri.

解决方法

从 this post起
public BitmapImage ImageFromBuffer(Byte[] bytes)
{
    MemoryStream stream = new MemoryStream(bytes);
    BitmapImage image = new BitmapImage();
    image.BeginInit();
    image.StreamSource = stream;
    image.EndInit();
    return image;
}

Android ImageView setImageBitmap 不显示图片

Android ImageView setImageBitmap 不显示图片

从sd卡里读出图片后有时调用setImageBitmap(bitmap)方法会显示不出图片,仔细考虑过后原来是加载的图片过大导致的,解决办法为:

BitmapFactory.Options op = new BitmapFactory.Options();

op.inSampleSize = 2;

//op.inJustDecodeBounds = true; //它仅仅会把它的宽,高取回来给你,这样就不会占用太多的内存,也就不会那么频繁的发生OOM了。            

//op.inPreferredConfig = Bitmap.Config.ARGB_4444;    // 默认是Bitmap.Config.ARGB_8888



private Bitmap createBitmapFromByteData(byte[] data ,Options options){
        
        Bitmap bitmap = null;
        if(options == null){
            bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
        }else{
            bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options);
        }
        return bitmap;
}

这样返回的bitmap就可以被显示出来了。

android – ImageView setImageBitmap无法在某些设备上运行

android – ImageView setImageBitmap无法在某些设备上运行

我正在练习Camera API,我做了以下工作:

一个.为捕获的图像设置目录(对于startActivityForResult)

湾设置位图,以便一旦保存在应用程序本身中就可以显示图像.

这是以下代码:

设置目录.

private static File getoutputMediaFile(int type) {

    // External sdcard location
    File mediaStorageDir = new File(
            Environment
                    .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),IMAGE_DIRECTORY_NAME);
    // Create the storage directory if it does not exist
    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            Log.d(IMAGE_DIRECTORY_NAME,"Oops! Failed create "
                    + IMAGE_DIRECTORY_NAME + " directory");
            return null;
        }
    }
    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",Locale.getDefault()).format(new Date());
    File mediaFile;
    if (type == MEDIA_TYPE_IMAGE) {
        mediaFile = new File(mediaStorageDir.getPath() + File.separator
                + "IMG_" + timeStamp + ".jpg");
    } else {
        return null;
    }

    return mediaFile;
}

应用程序中的全局变量

// Activity request codes
private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100;
public static final int MEDIA_TYPE_IMAGE = 1;

// directory name to store the captured images
private static final String IMAGE_DIRECTORY_NAME = "my_camera_app";

private Uri fileUri;

// Views
ImageView photo;
Button camera;

相机实现逻辑

// Use camera function
private void captureImage() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    fileUri = getoutputMediaFileUri(MEDIA_TYPE_IMAGE);

    intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);

    // start the image capture Intent
    startActivityForResult(intent,CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data) {
    // Todo Auto-generated method stub
    if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            // Successfully captured the image
            // display in imageview
            previewImage();
        } else {
            // Failed to capture image
            Toast.makeText(getApplicationContext(),"Sorry! Failed to capture image",Toast.LENGTH_SHORT)
                    .show();
        }
    }
}

private void previewImage() {
    try {
        // Bitmap factory
        BitmapFactory.Options options = new BitmapFactory.Options();

        // Downsizing image as it throws OutOfMemory exception for larger
        // images
        options.inSampleSize = 3;

        final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(),options);

        photo.setimageBitmap(bitmap);

    } catch (NullPointerException e) {
        e.printstacktrace();
    }
}

我遇到的问题是……对于我测试应用程序的某些设备,该应用程序显示了所拍摄图像的空白预览,而在其他设备中该应用程序运行良好.

为什么我得到一个空白的反馈?在某些情况下,当保存图像时,用户不会被定向到我的应用程序,而是用户卡在相机应用程序中.

请帮忙.

解决方法

至少对于galaxy S4上的Kitkat 4.4.2,具有相对布局,我不得不在ImageView上调用invalidate(),我只需要设置ImageIitBitmap.如果我没有,我得到了空白屏幕.在setimageBitmap()之后添加invalidate()之后,我得到了图像.

android – 由setImageBitmap()设置时,ImageView不会显示图像

android – 由setImageBitmap()设置时,ImageView不会显示图像

我在显示SD卡上的现有图像时遇到问题.
ImageView _photoView = (ImageView)findViewById(R.id.img_photo);

File photoFile = new File(Environment.getExternalStorageDirectory(),Session.PHOTO_FILE_NAME);
rawFileInputStream = new FileInputStream(photoFile);
Bitmap origPhoto = BitmapFactory.decodeStream(rawFileInputStream,null,new BitmapFactory.Options());

_photoView.setimageBitmap(origPhoto);
Log.d(TAG,origPhoto.getWidth() + " - " + origPhoto.getHeight());

照片确实存在且尺寸显示为显示,但ImageView标记内没有任何内容

<ImageView 
    android:id="@+id/img_photo"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

我试图将高度设置为固定大小,但我仍然看不到照片.

关于这个问题,我在SO上看到了一些帖子,但是还没有人回答过.

有任何想法吗?

**更新
如果我直接加载文件,而不是通过文件流,它可以工作

Bitmap origPhoto = BitmapFactory.decodeFile("/mnt/sdcard/" + Session.PHOTO_FILE_NAME);
double scale = MAX_WIDTH * 1.0 / origPhoto.getWidth();
int height = (int)(origPhoto.getHeight() * scale);
Bitmap scaledPhoto = Bitmap.createScaledBitmap(origPhoto,MAX_WIDTH,height,true);
_photoView.setimageBitmap(origPhoto);

但如果我然后添加Bitmap.createScaledBitmap()方法调用它不再有效,并且不显示图像.

解决方法

我用Bitmap替换了文件流scaledPhoto = BitmapFactory.decodeFile(“/ mnt / sdcard /”Session.PHOTO_FILE_NAME);它现在有效(更新中提到的内容)

android-imageView.setImageBitmap(Bitmap)极大地减慢了我的应用程序

android-imageView.setImageBitmap(Bitmap)极大地减慢了我的应用程序

我编写了一个小应用程序,该应用程序应显示一个转速表,该转速表通过蓝牙获取有关rpm的数据.当数据更改时,我旋转针头和其他一些imageViews以在屏幕上显示当前值.

旋转代码:

bMapRpm=bMapcanvasBackTacho.copy(bMapcanvasBackTacho.getConfig(), true);
canvasRpm.setBitmap(bMapRpm);
canvasRpm.save();
canvasRpm.rotate((float)Rpmdegree+(float)Rpmcurrentdegree,bMapRpm.getWidth()/2,bMapRpm.getHeight()/2);
canvasRpm.drawBitmap(bMapNadel,0,0,paint);
canvasRpm.restore();

bMapcanvasBackTacho只是透明的背景.
bMapNadel是针的位图.
bMapRpm是要绘制的画布的位图

更新我一直调用的imageView:

ivNadel.setimageBitmap(bMapRpm);

我尝试通过注释掉部分代码来尝试使应用程序变慢.
在将setimageBitmap()注释掉后,速度消失了.

有人知道如何以其他方式更新imageView还是我可以更改以使其更快地工作?

thx =)

解决方法:

您可以做两件事:
首先,不要在每次需要更新位图时都调用copy(),这会创建一个新的位图,并且会浪费时间和内存.
其次,在ImageView上调用invalidate().这将通知View某些更改,并且重新绘制自身,而不必完全替换位图时更新其他任何事情.

最后,您甚至可能想要创建自己的View实现,以便可以重写onDraw()并在那里进行旋转.

今天的关于c# – 如何从类型Image转换为类型BitmapImage?c# image转byte的分享已经结束,谢谢您的关注,如果想了解更多关于Android ImageView setImageBitmap 不显示图片、android – ImageView setImageBitmap无法在某些设备上运行、android – 由setImageBitmap()设置时,ImageView不会显示图像、android-imageView.setImageBitmap(Bitmap)极大地减慢了我的应用程序的相关知识,请在本站进行查询。

本文标签: