GVKun编程网logo

将BitmapImage保存到文件(bitmap保存为文件)

15

如果您想了解将BitmapImage保存到文件和bitmap保存为文件的知识,那么本篇文章将是您的不二之选。我们将深入剖析将BitmapImage保存到文件的各个方面,并为您解答bitmap保存为文件

如果您想了解将BitmapImage保存到文件bitmap保存为文件的知识,那么本篇文章将是您的不二之选。我们将深入剖析将BitmapImage保存到文件的各个方面,并为您解答bitmap保存为文件的疑在这篇文章中,我们将为您介绍将BitmapImage保存到文件的相关知识,同时也会详细的解释bitmap保存为文件的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

将BitmapImage保存到文件(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会锁定文件

.net – WPF中的BitmapImage会锁定文件

我用:
Dim bmi As New BitmapImage(New Uri(fiInfo.FullName,UriKind.Absolute))
bmi.CacheOption = BitmapCacheOption.OnLoad

这不是Use OnLoad
并且文件仍被锁定以覆盖硬盘.任何想法如何解锁?

问候

如您所链接的问题所示,您需要调用BeginInit和EndInit,以便设置UriSource属性:
Dim bmi As New BitmapImage()
bmi.BeginInit()
bmi.CacheOption = BitmapCacheOption.OnLoad
bmi.UriSource = New Uri(fiInfo.FullName,UriKind.Absolute)
bmi.EndInit()

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 实现将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)极大地减慢了我的应用程序

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)极大地减慢了我的应用程序的相关信息,请在本站寻找。

本文标签: