GVKun编程网logo

Image.Save(..)抛出GDI +异常,因为内存流已关闭

21

本篇文章给大家谈谈Image.Save,以及..抛出GDI+异常,因为内存流已关闭的知识点,同时本文还将给你拓展activemq异常,调整storeUsage配置、C#Image.Save()原因保存

本篇文章给大家谈谈Image.Save,以及..抛出GDI +异常,因为内存流已关闭的知识点,同时本文还将给你拓展activemq异常,调整storeUsage配置、C# Image.Save() 原因 保存 JPG 文件时无法访问关闭的流(PNG 有效)、c# – 上传到内存流时无法访问已关闭的文件、com.facebook.imagepipeline.image.CloseableAnimatedImage的实例源码等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Image.Save(..)抛出GDI +异常,因为内存流已关闭

Image.Save(..)抛出GDI +异常,因为内存流已关闭

我有一些要保存为图像的二进制数据。当我尝试保存图像时,如果用于保存图像的内存流在保存之前已关闭,则会引发异常。我这样做的原因是因为我正在动态创建图像,因此我需要使用内存流。

这是代码:

[TestMethod]public void TestMethod1(){    // Grab the binary data.    byte[] data = File.ReadAllBytes("Chick.jpg");    // Read in the data but do not close, before using the stream.    Stream originalBinaryDataStream = new MemoryStream(data);    Bitmap image = new Bitmap(originalBinaryDataStream);    image.Save(@"c:\test.jpg");    originalBinaryDataStream.Dispose();    // Now lets use a nice dispose, etc...    Bitmap2 image2;    using (Stream originalBinaryDataStream2 = new MemoryStream(data))    {        image2 = new Bitmap(originalBinaryDataStream2);    }    image2.Save(@"C:\temp\pewpew.jpg"); // This throws the GDI+ exception.}

有谁对我如何在关闭流的情况下保存图像有任何建议?保存图像后,我不能依靠开发人员记住关闭流。实际上,开发人员不会想到该图像是使用内存流生成的(因为它发生在其他地方的其他代码中)。

我真的很困惑:(

答案1

小编典典

由于它是MemoryStream,因此您实际上 不需要 关闭流-
如果不这样做,则不会发生任何不好的事情,尽管显然,处置任何一次性的东西都是一种好习惯。(有关更多信息,请参见此问题。)

但是,您 应该 处理位图-
这样将为您关闭流。基本上,一旦给Bitmap构造函数一个流,它就“拥有”该流,并且您不应该关闭它。正如该构造函数的文档所述:

您必须在位图的生存期内保持流打开。

放置位图时,我找不到任何承诺关闭流的文档,但是您应该能够轻松地进行验证。

activemq异常,调整storeUsage配置

activemq异常,调整storeUsage配置

activemq日志发现报错Frame size of 1140 MB larger than max allowed 100 MB超限,导致activemq堵塞,将storeUsage limit调大后恢复。

日志:

2017-03-14 11:34:16,974 | WARN  | Transport Connection to: tcp://x.x.x.x:54207 failed: java.io.IOException: Frame size of 1140 MB larger than max allowed 100 MB | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport: tcp:///x.x.x.x:54207@6160

 

配置文件activemq.xml 

 -->
          <systemUsage>
            <systemUsage>
                <memoryUsage>
                    <memoryUsage percentOfJvmHeap="70" />
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="10 gb"/>
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="10 gb"/>
                </tempUsage>
            </systemUsage>
        </systemUsage>

C# Image.Save() 原因 保存 JPG 文件时无法访问关闭的流(PNG 有效)

C# Image.Save() 原因 保存 JPG 文件时无法访问关闭的流(PNG 有效)

如何解决C# Image.Save() 原因 保存 JPG 文件时无法访问关闭的流(PNG 有效)?

我有奇怪的行为。

我有一个代码,当我将 byte[] 数组发送到图像(有时是 png,有时是 jpg)时。

当我保存 PNG 格式时 - 一切正常,但是当我尝试保存 JPG 时,有一个例外:“无法访问关闭的流”

代码:

imgTarget.Save(wwwroot + "\\ImageBank\\" + TaskRunID + "_" + TestCaseID + "_" + TestDataID + "_" + ImageCounter + Extension,ImageFormat.Jpeg);

我检查了什么:

  • imgTarget 不为空
  • imgTarget 包含正确的数据(即使 RawFormat 应该是 Png 或 Jpeg)
  • imgTarget.Save() 抛出异常:System.ObjectdisposedException:''无法访问关闭的流。''
  • 我尝试使用位图 - 将 imgTarget 复制到新位图,然后保存(结果相同)
  • 我尝试调用 Save() 方法,并将 ImageFormat 参数正确设置为 jpeg 或 png(结果相同)-对于 Image.Save() 和 Bitmap.Save()
  • 我检查了正确的路径和文件名(没问题)(在本例中为 C:\MyProd\wwwroot\ImageBank\10611_8_-1_1.jpeg)

奇怪的是 imgTarget 在调用方法 Save() 之前包含数据 - 但在它为 null/disposed 之后...

有人有什么想法吗?

编辑:

我准备了一些以同样方式失败的代码 - 它在最后一行失败。Save()

// This contains only the URL for the downloading of the file
string url = $"***url to download jpg file***";

// Request for the API - which downloads the jpg file via GET and provide the RawData via Response.RawBytes
APIRequest request = new APIRequest(RestSharp.Method.GET,url,new Authentication("user","password","-1"));

// Test case is only class which calls RestSharp (get png or jpg file)
TestCase t = new TestCase();
// This downloads the jpg file and store it as byte[] in t.GetDataFromAPI
t.API(request);
// Using downloaded data as byte[]
byte[] APIImageSource = t.GetDataFromAPI;
// Default extensions for saving files is .png
string Extension = ".png";
            

Image imgTarget;
// Now I use bytes[] and convert them into the image
imgTarget = ConvertBytesToImage(APIImageSource);
if (t.GetimageFormat(APIImageSource) == ExpectedFormat.JPEG)
{
     Extension = ".jpeg";
}
string path = "C:\\Temp\\filename" + Extension;
imgTarget.Save(path + Extension,ImageFormat.Jpeg);

有方法 ConvertBytesToImage:

internal static Image ConvertBytesToImage(byte[] bytes)
{
    using (var ms = new MemoryStream(bytes))
    {
        return Image.FromStream(ms);
    }
}

解决方法

@Simon Mourier 的评论是解决方案:

删除 MemoryStream 上的 using,或删除 ConvertBytesToImage 并保持 MemoryStream 处于活动状态,直到您完全保存图像。 – 西蒙·穆里埃 1 分钟前

我不明白为什么,但我已经删除了 using 语句,现在它可以工作了。

谢谢大家

c# – 上传到内存流时无法访问已关闭的文件

c# – 上传到内存流时无法访问已关闭的文件

我正在尝试创建一个控制器,允许我将图像保存到我的数据库中.到目前为止,我有一些代码:
/// <summary>
/// Handles an upload
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("")]
public async Task<IHttpActionResult> Upload()
{

    // If the request is not of multipart content,then return a bad request
    if (!Request.Content.IsMimeMultipartContent())
        return BadRequest("Your form must be of type multipartcontent.");

    // Get our provider
    var provider = new MultipartFormDataStreamProvider(ConfigurationManager.AppSettings["UploadFolder"]);

    // Upload our file
    await Request.Content.ReadAsMultipartAsync(provider);

    // Get our file
    var file = provider.Contents.First();
    var bytes = await file.ReadAsByteArrayAsync();

    // Using a MemoryStream
    using (var stream = new MemoryStream(bytes))
    {

        stream.Seek(0,SeekOrigin.Begin);

        // Create the data
        var data = "data:image/gif;base64," + Convert.ToBase64String(stream.ToArray());

        // Return the data
        return Ok(data);
    }
}

但它没有用.
当我进入使用块时,我收到一条错误消息:

“Error while copying content to a stream.”
“Cannot access a closed file.”

有谁知道为什么?

解决方法

发生这种情况的原因是MultipartFormDataStreamProvider在将上传的数据写入您将其传递到构造函数时提供的文件位置后关闭并处置上传的文件流:ConfigurationManager.AppSettings [“UploadFolder”]

要访问已上载的文件,您需要从上载的文件位置查询磁盘上的文件数据:

因此,在您的示例中,您的代码需要使用此代码:

// Read the first file from the file data collection:
var fileupload = provider.FileData.First;

// Get the temp name and path that MultipartFormDataStreamProvider used to save the file as:
var temppath = fileupload.LocalFileName;

// Now read the file's data from the temp location.
var bytes = File.ReadAllBytes(temppath);

此外,如果您使用非常小的文件,您可以使用:

MultipartMemoryStreamProvider

这会将文件数据存储在内存中,并且应该按预期工作.但是,如果您正在使用大文件(25mb),请先警告它首先流式传输到磁盘,否则您可能会出现内存异常,因为.net会尝试将整个文件保存在内存中.

com.facebook.imagepipeline.image.CloseableAnimatedImage的实例源码

com.facebook.imagepipeline.image.CloseableAnimatedImage的实例源码

项目:GitHub    文件:BoxingFrescoLoader.java   
private Drawable createDrawableFromFetchedResult(Context context,CloseableImage image) {
    if (image instanceof CloseableStaticBitmap) {
        CloseableStaticBitmap closeableStaticBitmap = (CloseableStaticBitmap) image;
        BitmapDrawable bitmapDrawable = createBitmapDrawable(context,closeableStaticBitmap.getUnderlyingBitmap());
        return (closeableStaticBitmap.getRotationAngle() != 0 && closeableStaticBitmap.getRotationAngle() != -1 ? new OrientedDrawable(bitmapDrawable,closeableStaticBitmap.getRotationAngle()) : bitmapDrawable);
    } else if (image instanceof CloseableAnimatedImage) {
        AnimatedDrawableFactory animatedDrawableFactory = Fresco.getimagePipelineFactory().getAnimatedFactory().getAnimatedDrawableFactory(context);
        if (animatedDrawableFactory != null) {
            AnimatedDrawable animatedDrawable = (AnimatedDrawable) animatedDrawableFactory.create(image);
            if (animatedDrawable != null) {
                return animatedDrawable;
            }
        }
    }
    throw new UnsupportedOperationException("Unrecognized image class: " + image);
}
项目:GitHub    文件:AnimatedSingleUsePostprocessorProducerTest.java   
@Test
public void testNonStaticBitmapIsPassedOn() {
  SingleUsePostprocessorConsumer postprocessorConsumer = produceResults();
  CloseableAnimatedImage sourceCloseableAnimatedImage = mock(CloseableAnimatedImage.class);
  CloseableReference<CloseableImage> sourceCloseableImageRef =
      CloseableReference.<CloseableImage>of(sourceCloseableAnimatedImage);
  postprocessorConsumer.onNewResult(sourceCloseableImageRef,Consumer.IS_LAST);
  sourceCloseableImageRef.close();
  mTestExecutorService.runUntilIdle();

  mInorder.verify(mConsumer).onNewResult(any(CloseableReference.class),eq(Consumer.IS_LAST));
  mInorder.verifyNoMoreInteractions();

  assertEquals(1,mResults.size());
  CloseableReference<CloseableImage> res0 = mResults.get(0);
  assertTrue(CloseableReference.isValid(res0));
  assertSame(sourceCloseableAnimatedImage,res0.get());
  res0.close();

  verify(sourceCloseableAnimatedImage).close();
}
项目:GitHub    文件:AnimatedRepeatedPostprocessorProducerTest.java   
@Test
public void testNonStaticBitmapIsPassedOn() {
  RepeatedPostprocessorConsumer postprocessorConsumer = produceResults();
  RepeatedPostprocessorRunner repeatedPostprocessorRunner = getRunner();

  CloseableAnimatedImage sourceCloseableAnimatedImage = mock(CloseableAnimatedImage.class);
  CloseableReference<CloseableImage> sourceCloseableImageRef =
      CloseableReference.<CloseableImage>of(sourceCloseableAnimatedImage);
  postprocessorConsumer.onNewResult(sourceCloseableImageRef,eq(Consumer.NO_FLAGS));
  mInorder.verifyNoMoreInteractions();

  assertEquals(1,res0.get());
  res0.close();

  performCancelAndVerifyOnCancellation();
  verify(sourceCloseableAnimatedImage).close();
}
项目:Boxing    文件:BoxingFrescoLoader.java   
private Drawable createDrawableFromFetchedResult(Context context,closeableStaticBitmap.getRotationAngle()) : bitmapDrawable);
    } else if (image instanceof CloseableAnimatedImage) {
        AnimatedDrawableFactory animatedDrawableFactory = Fresco.getimagePipelineFactory().getAnimatedFactory().getAnimatedDrawableFactory(context);
        if (animatedDrawableFactory != null) {
            AnimatedDrawable animatedDrawable = (AnimatedDrawable) animatedDrawableFactory.create(image);
            if (animatedDrawable != null) {
                return animatedDrawable;
            }
        }
    }
    throw new UnsupportedOperationException("Unrecognized image class: " + image);
}
项目:fresco    文件:AnimatedSingleUsePostprocessorProducerTest.java   
@Test
public void testNonStaticBitmapIsPassedOn() {
  SingleUsePostprocessorConsumer postprocessorConsumer = produceResults();
  CloseableAnimatedImage sourceCloseableAnimatedImage = mock(CloseableAnimatedImage.class);
  CloseableReference<CloseableImage> sourceCloseableImageRef =
      CloseableReference.<CloseableImage>of(sourceCloseableAnimatedImage);
  postprocessorConsumer.onNewResult(sourceCloseableImageRef,res0.get());
  res0.close();

  verify(sourceCloseableAnimatedImage).close();
}
项目:fresco    文件:AnimatedRepeatedPostprocessorProducerTest.java   
@Test
public void testNonStaticBitmapIsPassedOn() {
  RepeatedPostprocessorConsumer postprocessorConsumer = produceResults();
  RepeatedPostprocessorRunner repeatedPostprocessorRunner = getRunner();

  CloseableAnimatedImage sourceCloseableAnimatedImage = mock(CloseableAnimatedImage.class);
  CloseableReference<CloseableImage> sourceCloseableImageRef =
      CloseableReference.<CloseableImage>of(sourceCloseableAnimatedImage);
  postprocessorConsumer.onNewResult(sourceCloseableImageRef,res0.get());
  res0.close();

  performCancelAndVerifyOnCancellation();
  verify(sourceCloseableAnimatedImage).close();
}
项目:GitHub    文件:AnimatedImageFactoryImpl.java   
private CloseableImage getCloseableImage(
    ImageDecodeOptions options,AnimatedImage image,Bitmap.Config bitmapConfig) {
  List<CloseableReference<Bitmap>> decodedFrames = null;
  CloseableReference<Bitmap> previewBitmap = null;
  try {
    final int frameForPreview = options.useLastFrameForPreview ? image.getFrameCount() - 1 : 0;
    if (options.forceStaticImage) {
      return new CloseableStaticBitmap(
          createPreviewBitmap(image,bitmapConfig,frameForPreview),ImmutableQualityInfo.FULL_QUALITY,0);
    }

    if (options.decodeAllFrames) {
      decodedFrames = decodeAllFrames(image,bitmapConfig);
      previewBitmap = CloseableReference.cloneOrNull(decodedFrames.get(frameForPreview));
    }

    if (options.decodePreviewFrame && previewBitmap == null) {
      previewBitmap = createPreviewBitmap(image,frameForPreview);
    }
    AnimatedImageResult animatedImageResult = AnimatedImageResult.newBuilder(image)
        .setPreviewBitmap(previewBitmap)
        .setFrameForPreview(frameForPreview)
        .setDecodedFrames(decodedFrames)
        .build();
    return new CloseableAnimatedImage(animatedImageResult);
  } finally {
    CloseableReference.closeSafely(previewBitmap);
    CloseableReference.closeSafely(decodedFrames);
  }
}
项目:GitHub    文件:AnimatedImageFactoryWebPImpltest.java   
@Test
public void testCreateDefaults() {
  WebPImage mockWebPImage = mock(WebPImage.class);

  // Expect a call to WebPImage.create
  TrivialPooledByteBuffer byteBuffer = createByteBuffer();
  when(mWebPImageMock.decode(byteBuffer.getNativePtr(),byteBuffer.size()))
      .thenReturn(mockWebPImage);

  EncodedImage encodedImage = new EncodedImage(
      CloseableReference.of(byteBuffer,FAKE_RESOURCE_RELEASER));
  encodedImage.setimageFormat(ImageFormat.UNKNowN);

  CloseableAnimatedImage closeableImage =
      (CloseableAnimatedImage) mAnimatedImageFactory.decodeWebP(
          encodedImage,ImageDecodeOptions.defaults(),DEFAULT_BITMAP_CONfig);

  // Verify we got the right result
  AnimatedImageResult imageResult = closeableImage.getimageResult();
  assertSame(mockWebPImage,imageResult.getimage());
  assertNull(imageResult.getPreviewBitmap());
  assertFalse(imageResult.hasDecodedFrame(0));

  // Should not have interacted with these.
  verifyZeroInteractions(mMockAnimatedDrawableBackendProvider);
  verifyZeroInteractions(mMockBitmapFactory);
}
项目:GitHub    文件:AnimatedImageFactoryGifImpltest.java   
@Test
public void testCreateDefaults() {
  GifImage mockGifImage = mock(GifImage.class);

  // Expect a call to GifImage.create
  TrivialPooledByteBuffer byteBuffer = createByteBuffer();
  when(mGifImageMock.decode(byteBuffer.getNativePtr(),byteBuffer.size()))
      .thenReturn(mockGifImage);

  EncodedImage encodedImage = new EncodedImage(
      CloseableReference.of(byteBuffer,FAKE_RESOURCE_RELEASER));
  encodedImage.setimageFormat(ImageFormat.UNKNowN);

  CloseableAnimatedImage closeableImage =
      (CloseableAnimatedImage) mAnimatedImageFactory.decodeGif(
          encodedImage,DEFAULT_BITMAP_CONfig);

  // Verify we got the right result
  AnimatedImageResult imageResult = closeableImage.getimageResult();
  assertSame(mockGifImage,imageResult.getimage());
  assertNull(imageResult.getPreviewBitmap());
  assertFalse(imageResult.hasDecodedFrame(0));

  // Should not have interacted with these.
  verifyZeroInteractions(mMockAnimatedDrawableBackendProvider);
  verifyZeroInteractions(mMockBitmapFactory);
}
项目:fresco    文件:AnimatedImageFactoryImpl.java   
private CloseableImage getCloseableImage(
    ImageDecodeOptions options,frameForPreview);
    }
    AnimatedImageResult animatedImageResult = AnimatedImageResult.newBuilder(image)
        .setPreviewBitmap(previewBitmap)
        .setFrameForPreview(frameForPreview)
        .setDecodedFrames(decodedFrames)
        .build();
    return new CloseableAnimatedImage(animatedImageResult);
  } finally {
    CloseableReference.closeSafely(previewBitmap);
    CloseableReference.closeSafely(decodedFrames);
  }
}
项目:fresco    文件:AnimatedImageFactoryWebPImpltest.java   
@Test
public void testCreateDefaults() {
  WebPImage mockWebPImage = mock(WebPImage.class);

  // Expect a call to WebPImage.create
  TrivialPooledByteBuffer byteBuffer = createByteBuffer();
  when(mWebPImageMock.decode(byteBuffer.getNativePtr(),imageResult.getimage());
  assertNull(imageResult.getPreviewBitmap());
  assertFalse(imageResult.hasDecodedFrame(0));

  // Should not have interacted with these.
  verifyZeroInteractions(mMockAnimatedDrawableBackendProvider);
  verifyZeroInteractions(mMockBitmapFactory);
}
项目:fresco    文件:AnimatedImageFactoryGifImpltest.java   
@Test
public void testCreateDefaults() {
  GifImage mockGifImage = mock(GifImage.class);

  // Expect a call to GifImage.create
  TrivialPooledByteBuffer byteBuffer = createByteBuffer();
  when(mGifImageMock.decode(byteBuffer.getNativePtr(),imageResult.getimage());
  assertNull(imageResult.getPreviewBitmap());
  assertFalse(imageResult.hasDecodedFrame(0));

  // Should not have interacted with these.
  verifyZeroInteractions(mMockAnimatedDrawableBackendProvider);
  verifyZeroInteractions(mMockBitmapFactory);
}
项目:GitHub    文件:ExperimentalBitmapAnimationDrawableFactory.java   
@Override
public boolean supportsImageType(CloseableImage image) {
  return image instanceof CloseableAnimatedImage;
}
项目:GitHub    文件:ExperimentalBitmapAnimationDrawableFactory.java   
@Override
public AnimatedDrawable2 createDrawable(CloseableImage image) {
  return new AnimatedDrawable2(
      createAnimationBackend(
          ((CloseableAnimatedImage) image).getimageResult()));
}
项目:GitHub    文件:AnimatedImageFactoryWebPImpltest.java   
@Test
public void testCreateWithPreviewBitmap() throws Exception {
  WebPImage mockWebPImage = mock(WebPImage.class);

  Bitmap mockBitmap = MockBitmapFactory.create(50,50,DEFAULT_BITMAP_CONfig);

  // Expect a call to WebPImage.create
  TrivialPooledByteBuffer byteBuffer = createByteBuffer();
  when(mWebPImageMock.decode(byteBuffer.getNativePtr(),byteBuffer.size()))
      .thenReturn(mockWebPImage);
  when(mockWebPImage.getWidth()).thenReturn(50);
  when(mockWebPImage.getHeight()).thenReturn(50);

  // For decoding preview frame,expect some calls.
  final AnimatedDrawableBackend mockAnimatedDrawableBackend =
      createAnimatedDrawableBackendMock(1);

  when(mMockAnimatedDrawableBackendProvider.get(
          any(AnimatedImageResult.class),isNull(Rect.class)))
      .thenReturn(mockAnimatedDrawableBackend);
  when(mMockBitmapFactory.createBitmapInternal(50,DEFAULT_BITMAP_CONfig))
      .thenReturn(CloseableReference.of(mockBitmap,FAKE_BITMAP_RESOURCE_RELEASER));
  AnimatedImageCompositor mockCompositor = mock(AnimatedImageCompositor.class);
  powermockito.whenNew(AnimatedImageCompositor.class)
      .withAnyArguments()
      .thenReturn(mockCompositor);

  ImageDecodeOptions imageDecodeOptions = ImageDecodeOptions.newBuilder()
      .setDecodePreviewFrame(true)
      .build();
  EncodedImage encodedImage = new EncodedImage(
      CloseableReference.of(byteBuffer,FAKE_RESOURCE_RELEASER));
  encodedImage.setimageFormat(ImageFormat.UNKNowN);
  CloseableAnimatedImage closeableImage =
      (CloseableAnimatedImage) mAnimatedImageFactory.decodeWebP(
          encodedImage,imageDecodeOptions,imageResult.getimage());
  assertNotNull(imageResult.getPreviewBitmap());
  assertFalse(imageResult.hasDecodedFrame(0));

  // Should not have interacted with these.
  verify(mMockAnimatedDrawableBackendProvider).get(
      any(AnimatedImageResult.class),isNull(Rect.class));
  verifyNoMoreInteractions(mMockAnimatedDrawableBackendProvider);
  verify(mMockBitmapFactory).createBitmapInternal(50,DEFAULT_BITMAP_CONfig);
  verifyNoMoreInteractions(mMockBitmapFactory);
  verify(mockCompositor).renderFrame(0,mockBitmap);
}
项目:GitHub    文件:AnimatedImageFactoryWebPImpltest.java   
@Test
public void testCreateWithDecodeAlFrames() throws Exception {
  WebPImage mockWebPImage = mock(WebPImage.class);

  Bitmap mockBitmap1 = MockBitmapFactory.create(50,DEFAULT_BITMAP_CONfig);
  Bitmap mockBitmap2 = MockBitmapFactory.create(50,expect some calls.
  final AnimatedDrawableBackend mockAnimatedDrawableBackend =
      createAnimatedDrawableBackendMock(2);
  when(
      mMockAnimatedDrawableBackendProvider.get(
          any(AnimatedImageResult.class),isNull(Rect.class)))
      .thenReturn(mockAnimatedDrawableBackend);

  when(mMockBitmapFactory.createBitmapInternal(50,DEFAULT_BITMAP_CONfig))
      .thenReturn(CloseableReference.of(mockBitmap1,FAKE_BITMAP_RESOURCE_RELEASER))
      .thenReturn(CloseableReference.of(mockBitmap2,FAKE_BITMAP_RESOURCE_RELEASER));
  AnimatedImageCompositor mockCompositor = mock(AnimatedImageCompositor.class);
  powermockito.whenNew(AnimatedImageCompositor.class)
      .withAnyArguments()
      .thenReturn(mockCompositor);

  ImageDecodeOptions imageDecodeOptions = ImageDecodeOptions.newBuilder()
      .setDecodePreviewFrame(true)
      .setDecodeAllFrames(true)
      .build();

  EncodedImage encodedImage = new EncodedImage(
      CloseableReference.of(byteBuffer,imageResult.getimage());
  assertNotNull(imageResult.getDecodedFrame(0));
  assertNotNull(imageResult.getDecodedFrame(1));
  assertNotNull(imageResult.getPreviewBitmap());

  // Should not have interacted with these.
  verify(mMockAnimatedDrawableBackendProvider).get(
      any(AnimatedImageResult.class),isNull(Rect.class));
  verifyNoMoreInteractions(mMockAnimatedDrawableBackendProvider);
  verify(mMockBitmapFactory,times(2)).createBitmapInternal(50,mockBitmap1);
  verify(mockCompositor).renderFrame(1,mockBitmap2);
}
项目:GitHub    文件:AnimatedImageFactoryGifImpltest.java   
@Test
public void testCreateWithPreviewBitmap() throws Exception {
  GifImage mockGifImage = mock(GifImage.class);

  Bitmap mockBitmap = MockBitmapFactory.create(50,DEFAULT_BITMAP_CONfig);

  // Expect a call to WebPImage.create
  TrivialPooledByteBuffer byteBuffer = createByteBuffer();
  when(mGifImageMock.decode(byteBuffer.getNativePtr(),byteBuffer.size()))
      .thenReturn(mockGifImage);
  when(mockGifImage.getWidth()).thenReturn(50);
  when(mockGifImage.getHeight()).thenReturn(50);

  // For decoding preview frame,expect some calls.
  final AnimatedDrawableBackend mockAnimatedDrawableBackend =
      createAnimatedDrawableBackendMock(1);
  when(mMockAnimatedDrawableBackendProvider.get(
      any(AnimatedImageResult.class),FAKE_RESOURCE_RELEASER));
  encodedImage.setimageFormat(ImageFormat.UNKNowN);
  CloseableAnimatedImage closeableImage =
      (CloseableAnimatedImage) mAnimatedImageFactory.decodeGif(
          encodedImage,mockBitmap);
}
项目:GitHub    文件:AnimatedImageFactoryGifImpltest.java   
@Test
public void testCreateWithDecodeAlFrames() throws Exception {
  GifImage mockGifImage = mock(GifImage.class);

  Bitmap mockBitmap1 = MockBitmapFactory.create(50,DEFAULT_BITMAP_CONfig);

  // Expect a call to GifImage.create
  TrivialPooledByteBuffer byteBuffer = createByteBuffer();
  when(mGifImageMock.decode(byteBuffer.getNativePtr(),expect some calls.
  final AnimatedDrawableBackend mockAnimatedDrawableBackend =
      createAnimatedDrawableBackendMock(2);

  when(
      mMockAnimatedDrawableBackendProvider.get(
          any(AnimatedImageResult.class),mockBitmap2);
}
项目:fresco    文件:ExperimentalBitmapAnimationDrawableFactory.java   
@Override
public boolean supportsImageType(CloseableImage image) {
  return image instanceof CloseableAnimatedImage;
}
项目:fresco    文件:ExperimentalBitmapAnimationDrawableFactory.java   
@Override
public AnimatedDrawable2 createDrawable(CloseableImage image) {
  return new AnimatedDrawable2(
      createAnimationBackend(
          ((CloseableAnimatedImage) image).getimageResult()));
}
项目:fresco    文件:AnimatedImageFactoryWebPImpltest.java   
@Test
public void testCreateWithPreviewBitmap() throws Exception {
  WebPImage mockWebPImage = mock(WebPImage.class);

  Bitmap mockBitmap = MockBitmapFactory.create(50,mockBitmap);
}
项目:fresco    文件:AnimatedImageFactoryWebPImpltest.java   
@Test
public void testCreateWithDecodeAlFrames() throws Exception {
  WebPImage mockWebPImage = mock(WebPImage.class);

  Bitmap mockBitmap1 = MockBitmapFactory.create(50,mockBitmap2);
}
项目:fresco    文件:AnimatedImageFactoryGifImpltest.java   
@Test
public void testCreateWithPreviewBitmap() throws Exception {
  GifImage mockGifImage = mock(GifImage.class);

  Bitmap mockBitmap = MockBitmapFactory.create(50,mockBitmap);
}
项目:fresco    文件:AnimatedImageFactoryGifImpltest.java   
@Test
public void testCreateWithDecodeAlFrames() throws Exception {
  GifImage mockGifImage = mock(GifImage.class);

  Bitmap mockBitmap1 = MockBitmapFactory.create(50,mockBitmap2);
}
项目:CanPhotos    文件:CanViewPagerActivity.java   
private void handleAnimateBitmap(CloseableAnimatedImage animatedImage,int position) {

        AnimatedDrawableFactory animatedDrawableFactory =
                Fresco.getimagePipelineFactory().getAnimatedDrawableFactory();
        AnimatedDrawable drawable =
                animatedDrawableFactory.create(animatedImage.getimageResult());

        Bitmap bitmap = drawable2Bitmap(drawable);
        map.put(position,bitmap);


    }

关于Image.Save..抛出GDI +异常,因为内存流已关闭的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于activemq异常,调整storeUsage配置、C# Image.Save() 原因 保存 JPG 文件时无法访问关闭的流(PNG 有效)、c# – 上传到内存流时无法访问已关闭的文件、com.facebook.imagepipeline.image.CloseableAnimatedImage的实例源码等相关知识的信息别忘了在本站进行查找喔。

本文标签: