Ho creato una funzione per consentire l'inserimento di file .png trasparenti caricati in un database SQL Server e la visualizzazione su una pagina Web tramite HttpHandler.Come conservare la trasparenza png?
Mentre tutto funziona, la trasparenza png diventa nera quando viene visualizzata sulla pagina Web. C'è un modo per preservare la trasparenza?
Ecco il mio servizio di immagine che si inserisce nel database dal controller MVC:
public void AddImage(int productId, string caption, byte[] bytesOriginal)
{
string jpgpattern = ".jpg|.JPG";
string pngpattern = ".png|.PNG";
string pattern = jpgpattern;
ImageFormat imgFormat = ImageFormat.Jpeg;
if (caption.ToLower().EndsWith(".png"))
{
imgFormat = ImageFormat.Png;
pattern = pngpattern;
}
ProductImage productImage = new ProductImage();
productImage.ProductId = productId;
productImage.BytesOriginal = bytesOriginal;
productImage.BytesFull = Helpers.ResizeImageFile(bytesOriginal, 600, imgFormat);
productImage.BytesPoster = Helpers.ResizeImageFile(bytesOriginal, 198, imgFormat);
productImage.BytesThumb = Helpers.ResizeImageFile(bytesOriginal, 100, imgFormat);
productImage.Caption = Common.RegexReplace(caption, pattern, "");
productImageDao.Insert(productImage);
}
Ed ecco il "ResizeImageFile" funzione di supporto:
public static byte[] ResizeImageFile(byte[] imageFile, int targetSize, ImageFormat imageFormat)
{
using (System.Drawing.Image oldImage = System.Drawing.Image.FromStream(new MemoryStream(imageFile)))
{
Size newSize = CalculateDimensions(oldImage.Size, targetSize);
using (Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb))
{
using (Graphics canvas = Graphics.FromImage(newImage))
{
canvas.SmoothingMode = SmoothingMode.AntiAlias;
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;
canvas.DrawImage(oldImage, new Rectangle(new Point(0, 0), newSize));
MemoryStream m = new MemoryStream();
newImage.Save(m, imageFormat);
return m.GetBuffer();
}
}
}
}
Che cosa devo fare per preservare la png trasparenza? Si prega di mostrare esempi. Non sono seriamente un esperto nella manipolazione delle immagini.
Grazie.
Provare a utilizzare 'Format32bppArgb' per preservare alfa (che è 'A'). –
Si prega di evitare il prefisso dei titoli delle domande con "C#" o simili. Questo è ciò che i tag sono per. –
Sai se il tuo file .png originale è 8 bit o è a colori? –