如果您对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)
- Android ImageView setImageBitmap 不显示图片
- android – ImageView setImageBitmap无法在某些设备上运行
- android – 由setImageBitmap()设置时,ImageView不会显示图像
- android-imageView.setImageBitmap(Bitmap)极大地减慢了我的应用程序
c# – 如何从类型Image转换为类型BitmapImage?(c# image转byte)
MemoryStream memStream = new MemoryStream(bytes); Image img = Image.FromStream(memStream);
现在我可以在内存中访问此图像.问题是我需要将其转换为类型BitmapImage才能在我的解决方案中使用它.
注意:我需要将其转换为类型BitmapImage而不是类型Bitmap.我无法弄明白,因为类型BitmapImage为它的构造函数接受了一个Uri.
解决方法
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 不显示图片
从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无法在某些设备上运行
一个.为捕获的图像设置目录(对于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(); } }
我遇到的问题是……对于我测试应用程序的某些设备,该应用程序显示了所拍摄图像的空白预览,而在其他设备中该应用程序运行良好.
为什么我得到一个空白的反馈?在某些情况下,当保存图像时,用户不会被定向到我的应用程序,而是用户卡在相机应用程序中.
请帮忙.
解决方法
android – 由setImageBitmap()设置时,ImageView不会显示图像
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()方法调用它不再有效,并且不显示图像.
解决方法
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)极大地减慢了我的应用程序的相关知识,请在本站进行查询。
本文标签: