Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2018, 23:13   #1
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию Прозрачность тайлсета в 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, 06:19   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Код:
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 вне форума Ответить с цитированием
Старый 22.01.2019, 15:50   #3
GreyScall
Пользователь
 
Аватар для GreyScall
 
Регистрация: 01.01.2011
Сообщений: 29
По умолчанию

Canvas? CopyRect?
Вроде как такое в плане прозрачности никогда и не поддерживалось. Попробуйте через Draw()?
Regards, GreyScall.
GreyScall вне форума Ответить с цитированием
Старый 23.01.2019, 12:24   #4
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию

Я тогда решил эту проблему. Вот может кому пригодится: https://github.com/devapromix-delphi/tiled
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TPNGImage и прозрачность kaizer131 Мультимедиа в Delphi 12 14.02.2011 19: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