Действительно невозможен прозрачный фон картинок на чистой винде? (без интернета)

Сам факт поддержки png файлов вызывает вопросы о невозможности создания прозрачного фона. И может вдруг кто-то знает какие-нибудь костыли или обходы, подойдет всё, от реестра до написания HTA/HTML приложения)

В Win-10 есть стандартное приложение Paint 3D (включающее в себя и 2D редактор). В панели которого есть пункт Canvas. В котором есть переключатель Transparent canvas.

#include < windows.h >
#include < gdiplus.h >
#pragma comment(lib, "gdiplus.lib")
using namespace Gdiplus;

const CLSID PngEncoder = { 0x557cf406, 0x1a04, 0x11d3, { 0x9a, 0x73, 0x00, 0x00, 0xf8, 0x1e, 0xf3, 0x2e } };

int _tmain(int argc, _TCHAR* argv[]) {
GdiplusStartupInput gsi; ULONG_PTR gtk;
GdiplusStartup(>k, &gsi, NULL);
Bitmap *image = new Bitmap(80, 80, PixelFormat32bppARGB);
Graphics *graphics = Graphics::FromImage(image);

graphics->Clear(Color::Transparent); // делаем прозрачный фон

SolidBrush *brush = new SolidBrush(Color::Blue);
graphics->FillEllipse(brush, 10, 10, 60, 60); // рисуем непрозрачный круг
delete brush;
delete graphics;

image->Save(L"D:\\myimage.png", &PngEncoder); // сохраняем в формате PNG
delete image;

GdiplusShutdown(gtk);
return 0;
}

результат - в файле синий круг на прозрачном фоне (на скриншоте файл открыт в Paint.NET)

#include < windows.h >
#include < gdiplus.h >
#pragma comment(lib, "gdiplus.lib")
using namespace Gdiplus;

const CLSID PngEncoder = { 0x557cf406, 0x1a04, 0x11d3, { 0x9a, 0x73, 0x00, 0x00, 0xf8, 0x1e, 0xf3, 0x2e } };

int _tmain(int argc, _TCHAR* argv[]) {
GdiplusStartupInput gsi; ULONG_PTR gtk;
GdiplusStartup(>k, &gsi, NULL);
Bitmap *image = new Bitmap(80, 80, PixelFormat32bppARGB);
Graphics *graphics = Graphics::FromImage(image);

graphics->Clear(Color::Transparent); // делаем прозрачный фон

SolidBrush *brush = new SolidBrush(Color::Blue);
graphics->FillEllipse(brush, 10, 10, 60, 60); // рисуем непрозрачный круг
delete brush;
delete graphics;

image->Save(L"D:\\myimage.png", &PngEncoder); // сохраняем в формате PNG
delete image;

GdiplusShutdown(gtk);
return 0;
}

результат - в файле синий круг на прозрачном фоне (на скриншоте файл открыт в Paint.NET)

Добавить комментарий