Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 05.06.2018, 00:13   #1
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Адрес: Украина, Черновцы
Сообщений: 385
Репутация: 47

icq: 499637481
skype: sergiytkach
По умолчанию Прозрачность тайлсета в TPNGImage.

Здраствуйте!

Не могу разобраться, почему нет прозрачности при отрисовке на канве.

Загружаю тайлсет 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;

Ожидается правильная отрисовка с альфа-каналом, но не тут то было. Вобщем не могу понять, что провтыкал
__________________
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума   Ответить с цитированием
Старый 05.06.2018, 07:19   #2
Pavia
Лис
Профессионал
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 1,613
Репутация: 1708
По умолчанию

Код:

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;
...

__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia на форуме   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TPNGImage и прозрачность kaizer131 Мультимедиа в Delphi 12 14.02.2011 20:43
Использование Copyrect в связке с TPngImage...? spamer Общие вопросы Delphi 4 25.10.2010 16:00
Изменить уровень прозрачности TPNGImage RidDozZ Мультимедиа в Delphi 1 28.05.2010 13:47
TGifImage TJpegImage TPngImage FantasyDD Компоненты Delphi 0 24.05.2010 15:41
Поворот tPNGImage на нужный угол Altera Общие вопросы Delphi 3 08.09.2009 14:25


10:48.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru