2
votes

.Net Core ne peut pas utiliser Bitmap

Je travaille sur un service Web utilisant .Net Core 2.1.

J'ai un tableau d'octets contenant toutes les valeurs de pixels (en échelle de gris), une largeur, une hauteur. Je veux créer un bitmap à partir de ces paramètres.

Voici mon code (à partir d'un projet .Net Framework 4 opérationnel):

public FileResult PostSealCryptItem(Byte[] matrix, int width, int height)
{
    Bitmap bmp = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
    for (int y = 0; y < height; y++)
        for (int x = 0; x < width; x++)
            bmp.SetPixel(x, y, Color.FromArgb(ToArgb(matrix, x, y)));

    Byte[] data = BitmapToByteArray(bmp);
    FileContentResult result = new FileContentResult(data , "image/png");

    return result;
}

Mais dans. NET Core, j'ai l'erreur:

Le type ou le nom d'espace de noms 'Bitmap' est introuvable (il vous manque une directive using ou une référence d'assembly?)

J'ai essayé d'ajouter une référence à System.Drawing mais cela n'a pas fonctionné.


8 commentaires

Il n'y a pas de manipulation d'image intégrée dans .NET Core, vous devez utiliser un outil tiers, mais il y en a de bons. Par exemple, j'utilise actuellement SkiaSharp .


Copie possible de Comment utiliser les ressources bitmap dans ASP.NET Application principale?


Il existe System.Drawing.Common


@stuartd L'inconvénient est que vous êtes limité à l'exécution de Windows, je crois?


@DavidG y ressemble, maintenant je vois qu'il a Microsoft.Win32.SystemEvents comme dépendance


vous pouvez utiliser le pack de compatibilité Windows. Je suppose que vous devez vous en tenir à Windows alors ... blogs.msdn.microsoft.com/dotnet/2017/11/16/...


hanselman.com/blog/HowDoYouUseSystemDrawingInNETCore.aspx


@stuartd Oui, c'est pourquoi je ne recommanderais pas de l'utiliser. Surtout compte tenu du fait que SkiaSharp et ImageSharp font tous les deux tout (et plus). Skia prend également en charge webp, ce qui peut être utile.


3 Réponses :


0
votes

Vous pouvez utiliser ImageSharp au lieu de System.Drawing

https://github.com/SixLabors/ImageSharp

Console Nuget

Install-Package SixLabors.ImageSharp -Version 1.0.0-beta0005


0 commentaires

5
votes

Installez Nuget Package System.Drawing.Common

Il n'est plus inclus avec .net core et doit être ajouté manuellement.


0 commentaires

0
votes

Aspose.Drawing est un remplacement multiplateforme de System.Drawing. La bibliothèque est entièrement gérée et prend en charge les services Web à l'aide de .Net Core 2.1. (Je suis l'un des développeurs.)


0 commentaires