如果您想了解将BitmapImage保存到文件和bitmap保存为文件的知识,那么本篇文章将是您的不二之选。我们将深入剖析将BitmapImage保存到文件的各个方面,并为您解答bitmap保存为文件
如果您想了解将BitmapImage保存到文件和bitmap保存为文件的知识,那么本篇文章将是您的不二之选。我们将深入剖析将BitmapImage保存到文件的各个方面,并为您解答bitmap保存为文件的疑在这篇文章中,我们将为您介绍将BitmapImage保存到文件的相关知识,同时也会详细的解释bitmap保存为文件的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- 将BitmapImage保存到文件(bitmap保存为文件)
- .net – WPF中的BitmapImage会锁定文件
- Android ImageView setImageBitmap 不显示图片
- Android 实现将Bitmap 保存到本地
- android-imageView.setImageBitmap(Bitmap)极大地减慢了我的应用程序
将BitmapImage保存到文件(bitmap保存为文件)
我正在开发一个程序,可将图像从URL下载到bitmapimage并显示它。接下来,我尝试使用jpegbitmapencoder将位图图像保存到硬盘驱动器。文件已成功创建,但实际的jpeg图像为空或1个黑色像素。
public Guid SavePhoto(string istrImagePath){ ImagePath = istrImagePath; BitmapImage objImage = new BitmapImage( new Uri(istrImagePath, UriKind.RelativeOrAbsolute)); PictureDisplayed.Source = objImage; savedCreationObject = objImage; Guid photoID = System.Guid.NewGuid(); string photolocation = photoID.ToString() + ".jpg"; //file name JpegBitmapEncoder encoder = new JpegBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(objImage)); using (FileStream filestream = new FileStream(photolocation, FileMode.Create)) { encoder.Save(filestream); } return photoID;}
这是保存和显示照片的功能。照片正确显示,但是再次保存后,我得到一个空的jpeg或1个黑色像素。
答案1
小编典典从Uri创建BitmapImage时,需要时间来下载图像。
如果您检查以下属性,则该值可能为TRUE
objImage.IsDownloading
这样,您可以将侦听器附加到DownloadCompleted事件处理程序,并将所有处理移至该EventHandler。
objImage.DownloadCompleted += objImage_DownloadCompleted;
该处理程序的外观如下所示:
private void objImage_DownloadCompleted(object sender, EventArgs e){ JpegBitmapEncoder encoder = new JpegBitmapEncoder(); Guid photoID = System.Guid.NewGuid(); String photolocation = photoID.ToString() + ".jpg"; //file name encoder.Frames.Add(BitmapFrame.Create((BitmapImage)sender)); using (var filestream = new FileStream(photolocation, FileMode.Create)) encoder.Save(filestream);}
您可能还希望为DownloadFailed添加另一个EventHandler,以便正常处理任何错误情况。
编辑
根据Ben的评论添加了完整的示例类:
public partial class MainWindow : Window{ public MainWindow() { InitializeComponent(); SavePhoto("http://www.google.ca/intl/en_com/images/srpr/logo1w.png"); } public void SavePhoto(string istrImagePath) { BitmapImage objImage = new BitmapImage(new Uri(istrImagePath, UriKind.RelativeOrAbsolute)); objImage.DownloadCompleted += objImage_DownloadCompleted; } private void objImage_DownloadCompleted(object sender, EventArgs e) { JpegBitmapEncoder encoder = new JpegBitmapEncoder(); Guid photoID = System.Guid.NewGuid(); String photolocation = photoID.ToString() + ".jpg"; //file name encoder.Frames.Add(BitmapFrame.Create((BitmapImage)sender)); using (var filestream = new FileStream(photolocation, FileMode.Create)) encoder.Save(filestream); } }
.net – WPF中的BitmapImage会锁定文件
Dim bmi As New BitmapImage(New Uri(fiInfo.FullName,UriKind.Absolute)) bmi.CacheOption = BitmapCacheOption.OnLoad
这不是Use OnLoad
并且文件仍被锁定以覆盖硬盘.任何想法如何解锁?
问候
Dim bmi As New BitmapImage() bmi.BeginInit() bmi.CacheOption = BitmapCacheOption.OnLoad bmi.UriSource = New Uri(fiInfo.FullName,UriKind.Absolute) bmi.EndInit()
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 实现将Bitmap 保存到本地
Overview
图片是一个可以使你程序变得比较的美观,所以我们会在我们的软件中使用图片。但是对于图片的操作也是比较的复杂。今天,我们学习一下如是将我们的图片保存到我们的本地。
开发环境
Android Studio 3.6
Android 11
Mac OS 10.15
模拟机 Google Pixel3 API R
然后学习一下如何来完成我们的功能
按照国际惯例,我们先来看一下我们的代码:
/** * Bitmap 帮助类之一 */ class BitmapUtils { /** * Save Bitmap * * @param name file name * @param bm picture to save */ static void saveBitmap(String name, Bitmap bm, Context mContext) { Log.d("Save Bitmap", "Ready to save picture"); //指定我们想要存储文件的地址 String TargetPath = mContext.getFilesDir() + "/images/"; Log.d("Save Bitmap", "Save Path=" + TargetPath); //判断指定文件夹的路径是否存在 if (!FileUtils.fileIsExist(TargetPath)) { Log.d("Save Bitmap", "TargetPath isn''t exist"); } else { //如果指定文件夹创建成功,那么我们则需要进行图片存储操作 File saveFile = new File(TargetPath, name); try { FileOutputStream saveImgOut = new FileOutputStream(saveFile); // compress - 压缩的意思 bm.compress(Bitmap.CompressFormat.JPEG, 80, saveImgOut); //存储完成后需要清除相关的进程 saveImgOut.flush(); saveImgOut.close(); Log.d("Save Bitmap", "The picture is save to your phone!"); } catch (IOException ex) { ex.printStackTrace(); } } } }
这样我们的写入方法就完成了,比较的简单的。
首相,我们需要获取我们的软件的根目录。我们可以使用Context.getFilesDir()
来获取到软件的根目录,并且我需要保存到我们的images
文件下方。
这样获取了我么的存储路径然后我们的需要判断是不是首次使用,或者是该目录是否存在,然后我们看一下如何来判断我们的文件存在方法。
看一下源代码:
class FileUtils { /** * 判断指定目录的文件夹是否存在,如果不存在则需要创建新的文件夹 * @param fileName 指定目录 * @return 返回创建结果 TRUE or FALSE */ static boolean fileIsExist(String fileName) { //传入指定的路径,然后判断路径是否存在 File file=new File(fileName); if (file.exists()) return true; else{ //file.mkdirs() 创建文件夹的意思 return file.mkdirs(); } } }
我们在这个方法中传入指定的存储路径,然后判断是否存在,如果存在我们需要创建我们的指定目录,然后返回我们的创建结果。这样我们的对目录的操作就基本完成了。
完成对目录的操作,我们在看下如何完成我们的存储过程,我们需要创建一个FileOutputStream
来用于图片的写入,并且我们需要对图片进行相对应的压缩操作。
并且我们的在最后需要清除我们相关的方法,这样我们的地Bitmap
的操作就基本完成了。比较简单。
以上这篇Android 实现将Bitmap 保存到本地就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
- 详解Android Bitmap的使用
- android获取图片尺寸的两种方式及bitmap的缩放操作
- Android 实现把bitmap图片的某一部分的颜色改成其他颜色
- Android中的Bitmap序列化失败的解决方法
- Android BitmapUtils工具类使用详解
- Android Bitmap的加载与缓存
- 详解Android Bitmap的常用压缩方式
- Android中的Bitmap的详细介绍
- Android图片处理工具类BitmapUtils
- Android开发中Bitmap高效加载使用详解
- Android中Glide获取图片Path、Bitmap用法详解
- Android 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()并在那里进行旋转.
关于将BitmapImage保存到文件和bitmap保存为文件的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于.net – WPF中的BitmapImage会锁定文件、Android ImageView setImageBitmap 不显示图片、Android 实现将Bitmap 保存到本地、android-imageView.setImageBitmap(Bitmap)极大地减慢了我的应用程序的相关信息,请在本站寻找。
本文标签: