SORU
27 HAZİRAN 2009, CUMARTESİ


Genel bir hata GDI , JPEG Resim MemoryStream oluştu

Bu rezil bir hata tüm web üzerinden bir bit gibi görünüyor. Benim senaryoya uymuyor gibi sorunuma bir cevap bulmak mümkün olmuştur. Bir istisna akışı için görüntü kaydederken atılmış olur.

Garip bir şekilde mükemmel bir png ile çalışır ama jpg ile yukarıdaki hata veriyor ve oldukça kafa karıştırıcı olan gif bu.

Orada en benzer sorun izinleri olmadan dosyaları için görüntü kaydedilmesi ile ilgilidir. İronik bir şekilde çözüm benim yaptığım gibi hafıza stream kullanmaktır....

public static byte[] ConvertImageToByteArray(Image imageToConvert)
{
    using (var ms = new MemoryStream())
    {
        ImageFormat format;
        switch (imageToConvert.MimeType())
        {
            case "image/png":
                format = ImageFormat.Png;
                break;
            case "image/gif":
                format = ImageFormat.Gif;
                break;
            default:
                format = ImageFormat.Jpeg;
                break;
        }

        imageToConvert.Save(ms, format);
        return ms.ToArray();
    }
}

Bu özel durum için daha fazla ayrıntı. Bu kadar çok sorunları neden nedeni açıklama olmaması :(

System.Runtime.InteropServices.ExternalException was unhandled by user code
Message="A generic error occurred in GDI ."
Source="System.Drawing"
ErrorCode=-2147467259
StackTrace:
   at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters    encoderParams)
   at System.Drawing.Image.Save(Stream stream, ImageFormat format)
   at Caldoo.Infrastructure.PhotoEditor.ConvertImageToByteArray(Image imageToConvert) in C:\Users\Ian\SVN\Caldoo\Caldoo.Coordinator\PhotoEditor.cs:line 139
   at Caldoo.Web.Controllers.PictureController.Croppable() in C:\Users\Ian\SVN\Caldoo\Caldoo.Web\Controllers\PictureController.cs:line 132
   at lambda_method(ExecutionScope , ControllerBase , Object[] )
   at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
 InnerException: 

Denedim TAMAM her şey çok uzak.

  1. Görüntü klonlama ve bunun üzerinde çalışıyoruz.
  2. Bu MIME jpeg kalite ayarı geçirilmesi için kodlayıcı alınıyor.

Biri yardım edebilir lütfen.

CEVAP
27 HAZİRAN 2009, CUMARTESİ


TAMAM Sadece tamamen şans ve bir şey yok, belirli bir yöntem ile yanlış nedenini bulmuş görünüyor, daha da geri çağrı yığını.

Önceki görüntü yeniden boyutlandırma ve bu yönteminin bir parçası olarak ben aşağıdaki gibi yeniden boyutlandırılan bir nesne döndürür. Yukarıdaki yöntem için iki arama ve bir dosyaya doğrudan bir tasarruf sahibim.

// At this point the new bitmap has no MimeType
// Need to output to memory stream
using (var m = new MemoryStream())
{
       dst.Save(m, format);

       var img = Image.FromStream(m);

       //TEST
       img.Save("C:\\test.jpg");
       var bytes = PhotoEditor.ConvertImageToByteArray(img);


       return img;
 }

Bellek nesnesi oluşturuldu akışı gibi görünüyorvardırnesne kaydedilir anda açık olması. Bu yüzden emin değilim. Bu etrafında nasıl alabilirim herkes beni aydınlatmak için yapabiliyor.

Ben sadece yeniden boyutlandırma kodu this hedef dosyasına benzer kullandıktan sonra bilinmeyen bir mıme türü (ımg.çünkü bir dereden dönüş RawFormat.Benzersiz meta veriler, ilkeler ve zorlaşıyor gibi tüm görüntü nesneleri doğru Mıme türü gibi genel Kimliği aksi halde işleme kodu yazmak.

EDİT

Bu ama here's Jon Skeet gelen cevap ilk benim arama gelmedi

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • hytchme

    hytchme

    9 Mart 2014
  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • Schmittastic Jr.

    Schmittastic

    19 Mart 2013