GDI +, JPEG Image to MemoryStream öğesinde genel bir hata oluştu


326

Bu, tüm web'de biraz rezil bir hata gibi görünüyor. Öyle ki, senaryom uymadığı için sorunuma bir cevap bulamadım. Görüntüyü akışa kaydettiğimde bir istisna oluşuyor.

Tuhaf bir şekilde bu bir png ile mükemmel çalışır, ancak yukarıdaki hatayı jpg ve gif ile karıştırır, ki bu oldukça kafa karıştırıcıdır.

Orada en benzer sorun görüntüleri izinsiz dosyalara kaydetmek ile ilgilidir. İronik olarak çözüm, yaptığım gibi bir bellek akışı 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();
    }
}

İstisna için daha fazla ayrıntı. Bunun bu kadar çok soruna neden olmasının nedeni açıklama eksikliğidir :(

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: 

Tamam şimdiye kadar denedim şeyler.

  1. Görüntüyü klonlama ve bunun üzerinde çalışma.
  2. Bu MIME için kodlayıcıyı jpeg kalite ayarıyla geçirme.



3
Benim için sorun şu ki klasör mevcut değildi. Sadece klasörü oluşturarak düzeltildi.
hazjack

Benim için bu aralık dışında yutulan bir endeks oldu.
Billy Jake O'Connor

Yanıtlar:


189

Tamam sadece sebebi sırf şans ve onun bu belirli yöntemle yanlış bir şey tarafından bulmuş gibi görünüyor, daha fazla çağrı yığını yedekleyin.

Daha önce görüntüyü yeniden boyutlandırıyorum ve bu yöntemin bir parçası olarak, yeniden boyutlandırılan nesneyi aşağıdaki gibi döndürüyorum. Yukarıdaki yönteme iki çağrı ekledim ve bir dosyaya doğrudan kaydedin.

// 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;
 }

Nesne üzerinde oluşturulduğu bellek akışı görünür vardır nesne kaydedilir anda açık olması. Bunun neden olduğundan emin değilim. Beni aydınlatabilen ve bununla nasıl başa çıkabileceğim var mı?

Çünkü sadece benzer yeniden boyutlandırma kodu kullandıktan sonra bir akıştan dönmek bu o zor yazma jenerik yapar gibi tüm görüntü nesnelerde doğru olduğu Mim türü gibi hedef dosya bilinmeyen bir mim türü olan (img.RawFormat.Guid) ve İd aksi takdirde kod işleme.

DÜZENLE

Bu ilk aramamda ortaya çıkmadı, ama Jon Skeet'in cevabı burada


4
Bir bellek akışından bir bitmap aldığınızda akışı kapatmamanız gerektiğini fark etmedim. çok yararlı, teşekkür ederim
mcdon

38
Teşekkür ederim. Bu muhtemelen saçlarımın sonunu kurtardı.
NotMe

6
Teşekkürler! Bu bana çok zaman kazandırdı, bir şey olsa da, cevabınızın başlangıcında hatanın nedenini vurgulamak ister misiniz? (ve sanırım çoğu şahin) cevaplar aracılığıyla orijinal sığınakta kaçırdı, belki "
GÖRÜNTÜYÜ

6
"Dst" değişkeniniz nedir?
WEFX

1
@madcapnmckay lütfen 'dst' değişkeninin ne olduğunu ve önemini açıklayın
Mike T

131

Bu hatayı alıyorsanız, uygulamanızın bazı dizinde yazma izni olmadığını söyleyebilirim.

Örneğin, görüntüyü bellek akışından dosya sistemine kaydetmeye çalışıyorsanız, bu hatayla karşılaşabilirsiniz.

Lütfen XP kullanıyorsanız, bu klasöre aspnet hesabı için yazma izni eklediğinizden emin olun.

Windows sunucusu (2003,2008) veya Vista kullanıyorsanız, Ağ hizmeti hesabı için yazma izni eklediğinizden emin olun.

Umarım bazılarına yardım eder.


7
Yapmadın! Lanet olası yazma izinleriyle 2 saat kaybettim ... Bunu göndermek için buraya geldim. Umarım daha fazla oy alırsın. :)
Gleno

2
BU benim için bir çözümdü. Tamamen +1!
Grandizer

5
Bitmap'i kaydetmeden önce File.WriteAllText ("filename.jpg", "") ve ardından File.DeleteFile ("filename.jpg") yapabilirsiniz. Benmarkımda bu sadece .001 saniye sürüyor ve hoş bir 'filename.jpg dosyasını kaydetme izniniz yok'
Despertar

@Despertar File.Delete () demek istediniz, ama bu çok kullanışlı bir numara! Her bitmap kaydettiğimde kesinlikle kullanacağım.
D Coetzee

2
Benim durumumda, dizin yoktu.
silencedmessage

54

Ben de gelecekteki bazı internet gezgin yardımcı olur umarım hata bu nedenini ekleyeceğiz. :)

GDI + bir görüntünün maksimum yüksekliğini 65500 ile sınırlar

Bazı temel görüntü yeniden boyutlandırmaları yapıyoruz, ancak yeniden boyutlandırmada en boy oranını korumaya çalışıyoruz. Bu işte biraz fazla iyi olan bir KG adamımız var; bunu 480 piksel yüksekliğinde ONE piksel genişliğinde bir fotoğrafla test etmeye karar verdi. Görüntü boyutlarımızı karşılayacak şekilde ölçeklendiğinde, yükseklik 68.000 pikselin kuzeyinde idi ve uygulamamız patladı A generic error occurred in GDI+.

Bunu test ile kendiniz doğrulayabilirsiniz:

  int width = 480;
  var height = UInt16.MaxValue - 36; //succeeds at 65499, 65500
  try
  {
    while(true)
    {
      var image = new Bitmap(width, height);
      using(MemoryStream ms = new MemoryStream())
      {
        //error will throw from here
        image.Save(ms, ImageFormat.Jpeg);
      }
      height += 1;
    }
  }
  catch(Exception ex)
  {
    //explodes at 65501 with "A generic error occurred in GDI+."
  }

Yapıcısına ArgumentExceptionatılan bir dostu .net yok çok kötü Bitmap.


17
Teşekkür ederim - bu Internet zaman gezgin bu mesajı terk ettiğiniz için oldukça minnettar.
Tom West

Testlerimden 65535 aslında maksimum değer. 65536'da genel hatayı görmeye başladım.
ChaseMedallion

Bunu tekrar denedim: Win10 .net 4.5 ve .net 4.6.1 ve daha da rasgele görünen 65501'de patladı. Kod ayrıca sözdizimi hataları ile doludur, güncellenecektir :)
Fred

37

Bu makalede tam olarak ne olduğu açıklanmaktadır: Bitmap ve Resim yapıcı bağımlılıkları

Kısacası, Imagebir dereden inşa edilen bir yapının ömrü boyunca , akış yok edilmemelidir.

Yani, yerine

using (var strm = new ... )  {
    myImage = Image.FromStream(strm);
}

bunu dene

Stream imageStream;
...

    imageStream = new ...;
    myImage = Image.FromStream(strm);

ve form kapat veya web sayfası kapanışında imageStream'i kapatın.


Evet, bu beni yakaladı. Ben vicdani ve benim akış sarılmış bir usingve daha sonra görüntüyü bir bellek akışına kopyalamaya çalıştı ve korkunç "GDI + genel hata" mesajı aldı.
Appleby

Bağlantınız bana sonsuz yönlendirmeler veriyordu; bu işe yarıyor. Tasarrufla ilgili bir sorun alıyordum PixelFormat.Format32bppArgbama değil PixelFormat.Format1bppIndexed. Bağladığınız makale nedenini açıklıyor: GDI +, her şeyi bellekte tutmak yerine bitmap verilerini kaynak akışından yeniden çözmeyi seçebilir. Benim tahminim 1bpp görüntüleri yeniden çözmez.
labreuer

Yeni bağlantı bile artık çalışmıyor. Basit bir google araması doğru sayfayı ortaya koymadı. Ama bu cevabı bulduğum için çok mutlu oldum! Yeni bir bitmap'e kopyalayarak
çözümüm

28

Geçersiz bir yola kaydetmeye çalışırsanız veya bir izin sorunu varsa da bu istisnayı alırsınız.

Dosya yolunun kullanılabilir olduğundan ve izinlerin doğru olduğundan% 100 emin değilseniz, bir metin dosyasına a yazmayı deneyin. Bu, çok basit bir düzeltmenin ne olacağını göz ardı etmek için sadece birkaç saniye sürer.

var img = System.Drawing.Image.FromStream(incomingStream);

// img.Save(path);
System.IO.File.WriteAllText(path, "Testing valid path & permissions.");

Ve dosyanızı temizlemeyi unutmayın.


Benim için sorun buydu ... Keşke hata daha az belirsiz olsaydı, beni çok zaman kazanırdı.
Oofpez

Evet! Kaydettiğiniz klasör mevcut olmalıdır. Şimdi bir görüntüyü kaydetmeye çalışmadan önce bunun için bir kontrol yapıyorum. (Yine de, hata yılda yaklaşık bir kez beni yakalar.)
Magnus Smith

Yolum dosya yerine bir dizindi.
Asen Kasimov

20

Görüntüyü bitmap değişkenine kaydet

using (var ms = new MemoryStream())
{
    Bitmap bmp = new Bitmap(imageToConvert);
    bmp.Save(ms, format);
    return ms.ToArray();
}

Bu benim sorunumu çözdü. Görüntüyü neden Bitmap'e kaydetmenin istisnayı uzaklaştırdığını açıklayabilir misiniz?
jmc

Günümü kurtardı .. soruna neyin neden olduğunu bilmiyorum ama Bitmap kaydetme çalışıyor .. System.Drawing.Image bellek akışına kaydetmez ama Bitmap yapar !!!
San

Bu benim için en iyi çözümdü. Yeni Bitmap oluşturma ve ondan dönüştürme.
uzay95

17

Birisi benim kadar aptalca şeyler yapıyorsa. 1. yolun mevcut olduğundan emin olun. 2. yazma izniniz olduğundan emin olun. 3. yolunuzun doğru olduğundan emin olun, benim durumumda TargetPath'te dosya adı eksik :(

şunu söylemeliydi, yolunuz "GDI + 'da genel bir hata oluştu"


16

JPEG'leri kaydederken de bu hatayı aldım, ancak yalnızca belirli görüntüler için.

Son kodum:

  try
  {
    img.SaveJpeg(tmpFile, quality); // This is always successful for say image1.jpg, but always throws the GDI+ exception for image2.jpg
  }
  catch (Exception ex)
  {
    // Try HU's method: Convert it to a Bitmap first
    img = new Bitmap(img); 
    img.SaveJpeg(tmpFile, quality); // This is always successful
  }

Görüntüleri yaratmadım, bu yüzden farkın ne olduğunu söyleyemem.
Bunu açıklayabilirse sevinirim.

Bu benim SaveJpeg fonksiyonu sadece FYI:

private static void SaveJpeg(this Image img, string filename, int quality)
{
  EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, (long)quality);
  ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg");
  EncoderParameters encoderParams = new EncoderParameters(1);
  encoderParams.Param[0] = qualityParam;
  img.Save(filename, jpegCodec, encoderParams);
}

private static ImageCodecInfo GetEncoderInfo(string mimeType)
{
    var encoders = ImageCodecInfo.GetImageEncoders();
    var encoder = encoders.SingleOrDefault(c => string.Equals(c.MimeType, mimeType, StringComparison.InvariantCultureIgnoreCase));
    if (encoder == null) throw new Exception($"Encoder not found for mime type {mimeType}");
    return encoder;
}

1
Bu saç çekme günlerini çözdü. Bu şimdiye kadar yazdım düşünüyorum en wtf kodu :)
Jeff Dunlop

13

Dosyayı kaydettiğim ana klasörlerden birinin sonunda bir boşluk varsa, GDI + 'nın genel istisnayı atacağını buldum.

Başka bir deyişle, "C: \ Documents and Settings \ myusername \ Local Settings \ Temp \ ABC DEF M1 Trended Values ​​\ Images \ picture.png" dosyasına kaydetmeye çalışırsam, genel istisna fırlattı.

Klasör adım, sondaki boşluğa sahip olan bir dosya adından üretiliyordu, bu nedenle .Trim () ve devam etmek kolaydı.


3
awesome - Bu kadar yakın olan dizin yoluna bakmayı hiç düşünmezdim
jharr100

11

kodunuz aşağıdaki gibi ise bu hata oluşur

private Image GetImage(byte[] byteArray)
{
   using (var stream = new MemoryStream(byteArray))
   {
       return Image.FromStream(stream);
    }
}

Doğru olan

private Image GetImage(byte[] byteArray)
{
   var stream = new MemoryStream(byteArray))
   return Image.FromStream(stream);        
}

Bunun nedeni, kullanma bloğundan geri dönmemiz olabilir


benim için bu kullanma bloğunda dönen oldu. Hala kullanarak kullanmak ama değeri blok dışında döndürür. Teşekkürler!
Dragouf

1
Eğer bu görüntüyü tekrar yeni bir Akışa (örneğin HttpContext.Response.OutputStream gibi) kaydediyorsanız "zor yoldan" öğrendim, ayrıca hata oluşmazsa bir stream.Flush () işlemi yapmanız gerekir. tekrar.
Lucian

11

Bu, Fred'in yanıtının "GDI, bir görüntünün yüksekliğini 65534 ile sınırlandırdığını" belirten bir genişletme / niteliktir. Bu sorunla .NET uygulamalarımızdan biriyle karşılaştık ve gönderiyi gördükten sonra, dış kaynak ekibimiz havada ellerini kaldırdı ve büyük değişiklikler olmadan sorunu çözemediklerini söyledi.

Testlerime dayanarak, 65534'ten daha yüksek bir yüksekliğe sahip görüntüler oluşturmak / değiştirmek mümkündür, ancak sorun bir akışa veya dosyaya CERTAIN FORMATS'a kaydederken ortaya çıkar . Aşağıdaki kodda, piksel yüksekliği benim için 65501 olduğunda, t.Save () yöntemi çağrısı arkadaşımıza genel bir istisna atar. Merak nedenleriyle, genişlik testini tekrarladım ve tasarruf için de aynı sınırı uyguladım.

    for (int i = 65498; i <= 100000; i++)
    {
        using (Bitmap t = new Bitmap(800, i))
        using (Graphics gBmp = Graphics.FromImage(t))
        {
            Color green = Color.FromArgb(0x40, 0, 0xff, 0);
            using (Brush greenBrush = new SolidBrush(green))
            {
                // draw a green rectangle to the bitmap in memory
                gBmp.FillRectangle(greenBrush, 0, 0, 799, i);
                if (File.Exists("c:\\temp\\i.jpg"))
                {
                    File.Delete("c:\\temp\\i.jpg");
                }
                t.Save("c:\\temp\\i.jpg", ImageFormat.Jpeg);
            }
        }
        GC.Collect();
    }

Aynı hata, bir bellek akışına yazarsanız da oluşur.

Yuvarlamak için, yukarıdaki kodu tekrarlayabilir ve ImageFormat.Jpeg yerine ImageFormat.Tiff veya ImageFormat.Bmp kullanabilirsiniz.

Bu benim için 100.000 yükseklik / genişliğe kadar çıkıyor - sınırları test etmedim. Bu bizim için geçerli bir seçimdi.

UYARI

Bellek içi TIFF akışları / dosyaları, JPG benzerlerinden daha fazla bellek tüketir.


10

Çok benzer bir sorun vardı ve aynı zamanda çalışmayan görüntüyü klonlamaya çalıştı. En iyi çözümün bellek akışından yüklenen görüntüden yeni bir Bitmap nesnesi oluşturmak olduğunu buldum. Bu şekilde, akış örn.

using (var m = new MemoryStream())
{
    var img = new Bitmap(Image.FromStream(m));
    return img;
}

Bu yardımcı olur umarım.


6

İzin nedeniyle oluşan hata. klasörün TÜM İZİNİ olduğundan emin olun.

public Image Base64ToImage(string base64String)
    {
        // Convert Base64 String to byte[]
        byte[] imageBytes = Convert.FromBase64String(base64String);
        MemoryStream ms = new MemoryStream(imageBytes, 0,
          imageBytes.Length);

        // Convert byte[] to Image
        ms.Write(imageBytes, 0, imageBytes.Length);
        Image image = Image.FromStream(ms, true);
        return image;
    }

 img.Save("YOUR PATH TO SAVE IMAGE")

Sana katılıyorum. PERMISSION ile bu sorunu
çözdüm

5

ÇÖZÜLDÜ - Tam olarak bu problemi yaşadım. Düzeltme, benim için, IIS sunucusunda IUSR için disk kotasını yukarı idi. Bu örnekte, öğelerin ve benzerlerinin görüntülerini içeren bir katalog uygulamamız var. "Anonim Web Kullanıcısı" için yükleme kotası, bu belirli barındırma şirketinin IIS sunucuları için varsayılan olan 100 MB olarak ayarlanmıştır. 400MB'a çıkardım ve hatasız resim yükleyebildim.

Bu sorun olmayabilir, ancak öyleyse bu kolay bir çözümdür.


4

Benim durumumda sorun, kaydettiğim yoldaydı (kök C:\). D:\111\İstisna ortadan kaldırmak için değiştirmek .


4

Bu hatanın başka bir nedeni - Bitmap örneğinin Kaydet yönteminde belirttiğiniz yol mevcut değil veya tam / geçerli bir yol sağlamadınız.

Tam bir yol değil, bir dosya adı geçiyordu çünkü sadece bu hatayı vardı!

Olur!


4

Benim sıram!

using (System.Drawing.Image img = Bitmap.FromFile(fileName))
{
      ... do some manipulation of img ...
      img.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg);
}

.Save üzerinde anladım ... çünkü using () dosyayı açık tutuyor, bu yüzden üzerine yazamıyorum. Belki bu gelecekte birine yardımcı olacaktır.


4

Karşılaştığım aynı sorun. Ama benim durumumda, dosyayı C sürücüsüne kaydetmeye çalışıyordum ve erişilebilir değildi. Bu yüzden tamamen erişilebilir olan D sürücüsüne kaydetmeye çalıştım ve başardım.

Bu yüzden önce kaydetmeye çalıştığınız klasörlerinizi kontrol edin. Söz konusu klasör için tüm (okuma ve yazma) haklarına sahip olmalısınız.


normalde c yönetici izni olmadan izin vermez.
Aneeq Azam Khan

2

"Jpeg" davanızın aslında:

            default:
                format = ImageFormat.Jpeg;
                break;

Biçimin başka bir şey değil, jpeg olduğundan emin misiniz?

Denerdim:

            case "image/jpg": // or "image/jpeg" !
                format = ImageFormat.Jpeg;
                break;

Veya imageToConvert.MimeType()gerçekte ne döndürdüğünü kontrol edin .

GÜNCELLEME

MemoryStream nesnesine yapmanız gereken başka bir başlatma var mı?


Teşekkürler. Kesinlikle doğru formatla çağrılıyor. Bir jpg yükledim, hata ayıklama ve MIME görüntü / jpeg olarak kabul edildiğini ve biçim JPG olduğunu onaylayın.
madcapnmckay

3
Ah, her zaman önce bariz olanı ortadan kaldırmaya çalışırım. Bunu yapmadım sayısını sayamıyorum ve daha sonra beni ısırmaya geri döndü.
ChrisF

2
  • Bir test sunucusunda bu sorun vardı ama canlı sunucuda değil.
  • Görüntüyü bir akışa yazıyordum, bu yüzden bir izin sorunu değildi.
  • Doğrudan .dll bazılarını test sunucusuna dağıtmak.
  • Tüm çözümü dağıtmak sorunu çözdü, bu yüzden muhtemelen garip bir derleme uyuşmazlığıydı

2

Yığına başka bir olası çözüm atmak için, bu hata mesajıyla karşılaştığım durumdan bahsedeceğim. Yöntem Bitmap.Save, dönüştürdüğüm ve görüntülediğim bir bitmap'i kaydederken bu istisnayı atacaktı. İfadenin üzerinde bir kırılma noktası olsaydı istisna Bitmap.Saveatmayacağını ya da bunun tarafından öngörüldüğü takdirde bunu atmayacağını keşfettim, bu Thread.Sleep(500)yüzden devam eden bir tür kaynak tartışması olduğunu varsayalım.

Bu istisnanın görünmesini önlemek için görüntüyü yeni bir Bitmap nesnesine kopyalamak yeterliydi:

new Bitmap(oldbitmap).Save(filename);

2

PDFÜretim sunucusunda ImageProcessor lib kullanarak görüntü oluşturma veya yeniden boyutlandırma konusunda benzer bir sorun yaşadık .

Uygulama havuzunu geri dönüştürün sorunu düzeltin.


1

Görüntüyü uzak bir konuma kaydetmeye çalışıyorsanız , NETWORK_SERVICEkullanıcı hesabını güvenlik ayarlarına eklediğinizden ve bu kullanıcıya okuma ve yazma izinleri verdiğinizden emin olun . Aksi takdirde işe yaramaz.


1
byte[] bts = (byte[])page1.EnhMetaFileBits; 
using (var ms = new MemoryStream(bts)) 
{ 
    var image = System.Drawing.Image.FromStream(ms); 
    System.Drawing.Image img = image.GetThumbnailImage(200, 260, null, IntPtr.Zero);      
    img.Save(NewPath, System.Drawing.Imaging.ImageFormat.Png);
}


1

Basit, yeni bir Bitmap örneği oluşturmak sorunu çözer.

string imagePath = Path.Combine(Environment.CurrentDirectory, $"Bhatti{i}.png");
Bitmap bitmap = new Bitmap(image);
bitmap.Save(imagePath);

0

Benim için kullanıyordum Image.Save(Stream, ImageCodecInfo, EncoderParameters)ve görünüşe göre bu rezil A generic error occurred in GDI+hataya neden oluyordu .

EncoderParameterJpegleri% 100 kalitede kurtarmak için kullanmaya çalışıyordum . Bu mükemmel "benim makine" (doh!) Ve üretim üzerinde çalışıyordu.

Image.Save(Stream, ImageFormat)Bunun yerine kullandığımda hata kayboldu! Bu yüzden bir aptal gibi, ikincisini kullanmaya devam ettim, ancak bunları varsayılan kalitede kaydetti, ancak% 50 olduğunu varsayıyorum.

Umarım bu bilgi birine yardımcı olur.


0

Ben de sorunla karşılaştım. Sorun, yükleme akışının atılmasından kaynaklanıyordu. Ama bertaraf etmedim. Net çerçevesi içinde. Tek yapmam gereken kullanmaktı:

image_instance = Image.FromFile(file_name);

onun yerine

image_instance.Load(file_name);

image_instance türü System.Windows.Forms.PictureBox! PictureBox'ın Load () görüntüsünün yüklendiği akışı atar ve bunu bilmiyordum.


0

@Savindra tarafından verilen cevaba dayanarak, uygulamanızda RHM yaparsanız ve yönetici olarak çalıştırmayı denerseniz , sorununuzu çözmelidir.

Benimki izin meselesi gibiydi.


0

Böyle bir hataya neden olan olası sorunlar şunlardır:

  1. Dizin mevcut değil (Aradığınız yöntem bu dizini sizin için otomatik olarak oluşturmaz)
  2. Çıkış dizinine yazma güvenlik izinleri, uygulamayı çalıştıran kullanıcının yazma izni vermez

Umarım bu yardımcı olur, bu benim sorunum için düzeltme oldu, ben sadece çıktı görüntüsünü kaydetmeden önce çıktı dizinin var olduğundan emin olun!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.