Algemene bug in GDI+ [opgelost]
Wanneer u een bitmapobject probeert te wijzigen, een afbeelding opslaat of uploadt naar een webserver, ontvangt u mogelijk een foutmelding Er is een algemene fout opgetreden in GDI+ . De fout kan optreden ongeacht de toepassing die wordt gebruikt. Dit bericht biedt de meest toepasselijke oplossingen die getroffen gebruikers kunnen toepassen om het probleem op te lossen.
Wat is GDI+?
Windows GDI+ biedt 2D-vectorafbeeldingen, afbeeldingen en typografie door te fungeren als een tussenlaag tussen toepassingen en apparaatstuurprogramma’s voor het weergeven van 2D-afbeeldingen, afbeeldingen en tekst. GDI+ verbetert de Windows Graphics Device Interface (GDI) (grafische apparaatinterface in eerdere versies van Windows) door nieuwe functies toe te voegen en bestaande te optimaliseren. Met andere woorden, GDI+ is het grafische subsysteem van Windows, dat bestaat uit een Application Programming Interface (API) voor het weergeven van grafische afbeeldingen en tekst met opmaak op zowel een videoscherm als een printer.
Algemene fout in GDI+
De algemene fout die wordt veroorzaakt door de GDI+-fout is erg algemeen omdat de uitzondering geen details geeft. Als u echter met dit probleem wordt geconfronteerd, zouden de onderstaande suggesties u moeten helpen het probleem op te lossen, afhankelijk van uw scenario of de taak die u hebt voltooid.
1] Start de doelomgeving opnieuw op en herhaal de actie die u aan het volgen was. Dit heeft gewerkt voor getroffen gebruikers die apps implementeren of verplaatsen van adoptie naar productie.
2] Deze fout kan optreden door het instellen van een “slot” bij het opslaan en overschrijven van een gewijzigde bitmap, omdat wanneer u een Bitmap-object initialiseert van een afbeelding die is opgeslagen op de harde schijf, het een vergrendeling creëert op het onderliggende afbeeldingsbestand. Met andere woorden, wanneer een Bitmap-object of Image-object wordt gemaakt van een bestand, blijft het bestand vergrendeld voor de duur van het object. Als gevolg hiervan kunt u de afbeelding niet wijzigen en weer opslaan in hetzelfde bestand waarin deze is gemaakt. Voer in dat geval een van de volgende handelingen uit om het probleem op te lossen:
- In plaats van het bestand te overschrijven, slaat u het nieuwe bestand op met een andere naam dan het oorspronkelijke bestand.
- Als u een bestaand bestand moet overschrijven, maakt u een aparte bitmap van de bestaande bitmap en gooit u de oude bitmap weg, waardoor het afbeeldingsbestand wordt ontgrendeld. U kunt nu de nodige wijzigingen aanbrengen in de nieuwe bitmap en de nieuwe bitmap opslaan met de originele afbeeldingsbestandsnaam.
- Opslaan in een “tussenliggende” geheugenstroom. De
Memory /FileStream
vs codebitmap.Save(...)
, hoewel contra-intuïtief, zou moeten werken met kleine variaties om rekening te houden met het aanroepen van een bepaalde methode.
Houd er rekening mee dat de onderliggende vergrendeling van het bestand alleen wordt vrijgegeven wanneer het Bitmap-object wordt verwijderd – zodra de vergrendeling is vrijgegeven, kunt u deze overschrijven.
3] U moet uw afbeeldingen verwijderen, want als u erop vertrouwt dat de vuilnisman ze op tijd vindt en onbeheerde GDI-bronnen vrijgeeft, krijgt u waarschijnlijk een uitzondering. Let daarnaast bij het schrijven van code op de volgende punten:
ConvertTo
Het ziet eruit als een verspilling, gebruik het gewoon als het nodig is.- Als u paden moet samenvoegen, gebruikt u
Path.Combine
. - Gebruik tekenreeksinterpolatie in plaats van tekenreeksen bij elkaar op te tellen.
- Als u een teken wilt escapen, zoals een backslash, gebruikt u Verbatim String Literal @”…”.
- Geef altijd de voorkeur
using
aan een operator die nooit vergeet een object weg te gooien, zelfs als de code een uitzondering genereert.
4] Geen toestemming om naar de map te schrijven bij het opslaan van het bestand, vooral als je een foutmelding krijgt op de website omdat de website draait met beperkte rechten. In een webtoepassing moet de groep van toepassingen of het account dat de website uitvoert, schrijftoegang hebben tot de map waarin het bestand moet worden opgeslagen, dus zorg ervoor dat de map waarin u het bestand probeert op te slaan, beschrijfbaar is. Als u bijvoorbeeld de website onder een account DefaultAppPool
gebruikt, moet u de IIS AppPool\DefaultAppPool
gebruiker schrijfrechten voor de map geven.
5] Als u Azure gebruikt en u krijgt een algemene fout in GDI+ wanneer u een bitmap alleen opent op een externe webserver en niet op uw lokale testmachine, is GDI+ mogelijk aanwezig op de Azure IIS-servers. kan geen nieuwe BMP-indelingen aan die door GIMP zijn gemaakt. Als dit het geval is, voert u een van de volgende handelingen uit om het probleem op te lossen:
- Sla de BMP opnieuw op met Paint.
- Gebruik in plaats daarvan een niet-gecomprimeerde PNG.
- Opslaan als 24-bit BMP met GIMP. Deze methode geeft een slechte kwaliteit.
6] Deze foutmelding wordt weergegeven als het pad waarnaar u navigeert Bitmap.Save()
niet geldig is (de map bestaat niet, enz.). Simpel gezegd, u schrijft het verkeerde pad om de afbeelding op te slaan. Zorg er in dit geval voor dat u het opslagpad corrigeert en zorg ervoor dat uw pad ook de bestandsnaam bevat.
7] Als het bitmapbestand al op de systeemschijf bestond en uw toepassing een fout gaf, volg dan deze stappen:
- Zorg ervoor dat de doelmap bestaat.
- Zorg ervoor dat de doelmap niet al een bestand met die naam heeft.
- Controleer de toestemming van uw map waarin de afbeelding is opgeslagen op uw lokale schijf. Klik hiervoor met de rechtermuisknop op de map en selecteer vervolgens Eigenschappen > Beveiliging > Bewerken > Toevoegen – selecteer Iedereen en vink het vakje Volledig beheer toestaan aan .
Hoe een algemene fout in GDI+ in C# op te lossen?
Als u een algemene fout krijgt die is opgetreden in GDI+ in C#, kan het zijn dat het bitmapbestand dat u probeert op te slaan al bestaat op uw systeemstation. In dit geval kunt u ervoor zorgen dat de doelmap bestaat en dat deze niet al een bestand met dezelfde naam heeft.
Wat is een GDI+-fout?
GDI+ geeft een foutmelding wanneer het geen bestanden kan opslaan, meestal om de twee meest voorkomende redenen. Een reden is dat wanneer u een Bitmap-object initialiseert van een afbeelding die op de harde schijf is opgeslagen, dit een vergrendeling op het onderliggende afbeeldingsbestand creëert. Vanwege de vergrendeling wordt deze fout gegenereerd wanneer u een gewijzigde bitmap probeert op te slaan en te overschrijven.
Hoe GDI-vensters te repareren?
Om de GDI+ Windows-fout op uw apparaat op te lossen, controleert u of de volgende suggesties werken:
- Voer een SFC-scan uit in een verhoogde opdrachtprompt.
- Voer de probleemoplosser voor stroom uit.
- Werk het stuurprogramma van uw videokaart bij.
- Controleer Windows-update.
- Start uw computer in de schone opstartmodus.
Wat is GDI op mijn laptop?
Met GDI kunnen applicatieontwikkelaars informatie op een scherm of printer weergeven zonder zich zorgen te maken over de details van het specifieke weergaveapparaat. De applicatieontwikkelaar roept de methoden aan die worden geleverd door de GDI+-klassen, en deze methoden doen op hun beurt de juiste aanroepen naar specifieke apparaatstuurprogramma’s. GDI+ isoleert de applicatie van de grafische hardware en het is deze isolatie die ontwikkelaars in staat stelt om apparaatonafhankelijke applicaties te maken.
Windows gebruikt nog steeds GDI?
Met de komst van Windows XP is GDI afgeschaft ten gunste van zijn opvolger, het op C++ gebaseerde GDI+-subsysteem. Hoewel GDI+ wordt meegeleverd met Windows XP en later, kan de GDI+ DLL ook worden geleverd met een toepassing en worden gebruikt in eerdere versies van Windows.
Bron: The Windows Club
Geef een reactie