Отвечая на код C # ... В целом, хорошая работа по созданию образа. В прошлом мне приходилось делать подобные вещи с некоторыми из моих приложений.
Однако один совет: все графические объекты в .NET основаны на примитивах Windows GDI +. Это означает, что эти объекты требуют правильного удаления для очистки своих ресурсов, не связанных с памятью, так же, как файловые дескрипторы или соединения с базой данных. Вы захотите немного подправить код для правильной поддержки.
Все объекты GDI + реализуют интерфейс IDisposable, делая их функциональными с помощью оператора using. Попробуйте переписать код следующим образом:
// Experiment with this value
int exposurePercentage = 40;
using (Image img = Image.FromFile("rss-icon.jpg"))
{
using (Graphics g = Graphics.FromImage(img))
{
// First Number = Alpha, Experiment with this value.
using (Pen p = new Pen(Color.FromArgb(75, 255, 255, 255)))
{
// Looks jaggy otherwise
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
int x, y;
// 3 * Height looks best
int diameter = img.Height * 3;
double imgPercent = (double)img.Height / 100;
x = 0 - img.Width;
// How many percent of the image to expose
y = (0 - diameter) + (int)(imgPercent * exposurePercentage);
g.FillEllipse(p.Brush, x, y, diameter, diameter);
pictureBox1.Image = img;
}
}
}
(Имейте в виду, в отличие от большинства моих примеров, у меня не было возможности скомпилировать и протестировать это ... Это скорее образец примера структурирования кода для обеспечения отсутствия утечек ресурсов, а не готовый продукт. В любом случае, возможно, есть более эффективные способы абстрагирования / структурирования. И настоятельно рекомендуем сделать это - добавить это в библиотеку DLL графической библиотеки, на которую вы можете просто ссылаться в любом проекте, который нуждается в этих возможностях в будущем!)