C# Skiasharp рисует полупрозрачные пиксели слишком темныеC#

Место общения программистов C#
Ответить
Anonymous
 C# Skiasharp рисует полупрозрачные пиксели слишком темные

Сообщение Anonymous »

Я работаю над сценарием, который должен снимать изображения и сложить их. Изображение 0 внизу, изображение 1 над этим, изображение 2 по этому и т. Д. И т. Д. С изображением n сверху. Обратите внимание, что, хотя каждый слой должен быть настолько непрозрачным, насколько это возможно, отдельные пиксели в слое могут быть полупрозрачными. < /P>
Проблема в том, что полупрозрачные пиксели слишком темные, когда они накладываются на что -либо, кроме чистой прозрачности. Мои компонентные изображения-все .png, экспортируются индивидуально из Gimp. Хотя я понимаю, что код, который у меня уже есть, может быть просто абстракцией обновления каждого отдельного пикселя. Я могу добавить каждый шаг изображения, объединяющего из кода, если это будет полезно. < /P>
using SkiaSharp;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace ImageCombiner
{
internal class Program
{
static void Main(string[] args)
{
string
folderPath = @"C:\Users\[username]\Pictures\[subfolder]\CombinedImage\"; // Text in brackets omitted

SKBitmap
bitmap = new SKBitmap();

int
counter = 0;

// Throw an error if the path does not exist
if (Directory.Exists(folderPath) == false)
{
Console.WriteLine($"Folder '{folderPath}' does not exist.");
}
// Else process the images
else
{
List imageFiles = Directory.GetFiles(folderPath)
.Where(file => Path.GetExtension(file).ToLower() == ".png" && file.ToLower().Contains("layer_"))
.ToList();

// Console.WriteLine("Image " + imageFiles.First() + " exists");

SKImageInfo
info = new SKImageInfo(20, 20);

SKSurface
surface;

SKCanvas
canvas;

SKPaint
skPaint = new SKPaint();

skPaint.BlendMode = SKBlendMode.HardLight;

surface = SKSurface.Create(info);

canvas = surface.Canvas;

foreach (string filePath in imageFiles)
{
bitmap = SKBitmap.Decode(File.ReadAllBytes(filePath));

if (bitmap != null)
{
Console.WriteLine("Image " + filePath + " exists");

// Add the current file to the bitmap
canvas.DrawBitmap(bitmap, 0, 0, skPaint);

// Save the new bitmap as a png image
SKImage
finalImage = surface.Snapshot();

SKData
data = finalImage.Encode(SKEncodedImageFormat.Png, 100);

using (FileStream fs = File.OpenWrite(folderPath + "FinalImage_" + counter.ToString() + ".png"))
{
data.SaveTo(fs);
}
}

counter++;
}
}
}
}
}
< /code>
слой 0 < /p>
слой 1 < /p>
слой 2 < /p>
слой 3 < /p>
Ожидаемый результат (как он выглядит в GIMP) < /p>
Фактический результат < /p>
. Skiasharp, даже пробуя их с обратным списком изображений. Я не знаю, нужно ли мне изменить то, что я делаю, с непрозрачностью изображений компонентов, или есть какой -то способ сочетания режимов смешивания для достижения этого. Я также немного посмотрел через посты Reddit и объяснения ИИ (последнее из которых было прямо о том, как «решить» проблему).
Если есть еще один пакет C#, который выполняет эту задачу лучше (и могу работать на основных платформах), я приму это как ответ (при условии, что я могу работать).>

Подробнее здесь: https://stackoverflow.com/questions/797 ... s-too-dark
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»