
Последние записи
- Кодировка в INDY 10 (как бороться с «???»)
- Переход по ссылке при клике на кнопку, счётчик кликов по кнопке и число переходов по ссылке на ява скрипт
- Сравнение двух диапазонов ячеек Excel на полное совпадение данных
- С++. Как напечатать в консоли два столбца?
- Конвертирование PNG в JPG на Delphi
- Можно ли, название сайта которое находится в шапке заключать в HTML тег h1 или h2 h3 h4 h5 h6?
- как бороться со знаками вопросов при проблеме с кодировкой в INDY 10 Delphi ?
- Связать ProgressBar + скорлинг в Texbox
- RichEdit и выгрузка в RTF-файл (добавление в конец файла)
- Чтение разделов из IniFile / MemIniFile

Оплата за обучение в Kata Academy только после твоего трудоустройства в IT
Начни карьеру Middle Java-разработчика, подробнее на сайте академии, ссылка - https://clck.ru/fCrQw

Интенсив по Python - 3-5 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
30th
Янв
Прозрачность тайлсета в TPNGImage
Posted by obzor under Delphi
Не могу разобраться, почему нет прозрачности при отрисовке на канве.
Загружаю тайлсет tileset.png, в котором есть прозрачность в PNGImage с именем Tileset. Далее рисую на канве компонента PNGImage с именем Surface этой процедурой:
procedure TForm1.DrawTile(const X, Y, Index: Integer);
begin
Surface.Canvas.CopyRect(Bounds(X * TileSize, Y * TileSize, TileSize,
TileSize), Tileset.Canvas, Bounds((Index mod TilesetWidth) * TileSize,
(Index div TilesetWidth) * TileSize, TileSize, TileSize));
end;
…вот так:
procedure TForm1.FormPaint(Sender: TObject);
var
X, Y: Integer;
begin
for Y := 0 to MapHeight - 1 do
for X := 0 to MapWidth - 1 do
begin
DrawTile(X, Y, Map[lrGround][X][Y]);
DrawTile(X, Y, Map[lrObject][X][Y]);
end;
Canvas.Draw(0, 0, Surface);
end;
Ожидается правильная отрисовка с альфа-каналом, но не тут то было. Вобщем не могу понять, что провтыкал
procedure BitmapToPng(bmp:TBitmap; var Png:TPNGObject);
type
T_RGB=packed record
B,G,R:Byte;
end;
T_RGBA=packed record
B, G, R, A:Byte;
end;
TA_Byte=array [0..65536] of Byte;
PA_Byte=^TA_Byte;
TA_RGB=array [0..65536] of T_RGB;
PA_RGB=^TA_RGB;
TA_RGBA=array [0..65536] of T_RGBA;
PA_RGBA=^TA_RGBA;
var X,Y:Integer;
BmpLine:PA_RGBA;
PngLine:PA_RGB;
PngLineAlpha:PA_Byte;
begin
png.Assign(Bmp);
if Bmp.PixelFormat=pf32bit then
begin
Png.CreateAlpha;
for Y:=0 to bmp.Height-1 do
begin
Pointer(BmpLine):=bmp.ScanLine[Y];
Pointer(PngLine):=png.Scanline[Y];
Pointer(PngLineAlpha):=png.AlphaScanline[Y];
for X:=0 to bmp.Width-1 do
begin
PngLineAlpha[X]:=BmpLine[X].A;
end;
end;
end;
end;
...
Png:=TPngObject.Create;
BitmapToPng(ImageControl.Image.Bitmap, png);
png.CreateAlpha;
Png.Draw(PaintBox1.Canvas, Rect1);
png.Destroy;
...
Случайные статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту

пеллетные котлы

Пеллетный котел Emtas

Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)