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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2008, 16:23   #581
Showy
Форумчанин Подтвердите свой е-майл
 
Аватар для Showy
 
Регистрация: 08.08.2007
Сообщений: 183
Сообщение

Цитата:
Сообщение от Beermonza Посмотреть сообщение
1) код, который слепляет множество PNG-файлов в один PNG-файл по принципу "прикреплять с права", короче портянкой.
С использованием PNGImage.

Функция AttachPNG присоединяет к изображению анимации новый кадр

Код:
procedure AttachPNG(var DstPNG: TPNGObject; var SrcPNG: TPNGObject);
type
  BGR = packed record
    B: Byte;
    G: Byte;
    R: Byte;
  end;

  TBGR = array [word] of BGR;
var
  StartX: Integer;
  AlphaDst, AlphaSrc: PByteArray;
  DstBGR, SrcBGR: ^TBGR;
  X, Y: Integer;
begin
  StartX := DstPNG.Width;
  DstPNG.SetSize(DstPNG.Width + SrcPNG.Width, SrcPNG.Height);

  for Y := 0 to SrcPNG.Height - 1 do
  begin
    AlphaDst := DstPNG.AlphaScanline[Y];
    AlphaSrc := SrcPNG.AlphaScanline[Y];
    DstBGR := DstPNG.Scanline[Y];
    SrcBGR := SrcPNG.Scanline[Y];

    for X := 0 to SrcPNG.Width - 1 do
    begin
      AlphaDst[X + StartX] := AlphaSrc[X];
      DstBGR[X + StartX].B := SrcBGR[X].B;
      DstBGR[X + StartX].G := SrcBGR[X].G;
      DstBGR[X + StartX].R := SrcBGR[X].R;
    end;
  end;
end;
Использование AttachPNG

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  DstPNG, SrcPNG: TPNGObject;
  i: Integer;
begin
  DstPNG := TPNGObject.Create;
  SrcPNG := TPNGObject.Create;
  DstPNG.CreateBlank(COLOR_RGBALPHA, 4, 1, 1);
  SrcPNG.LoadFromFile('C:\2.png');

  for i := 0 to 5 do
    AttachPNG(DstPNG, SrcPNG);
end;
Цитата:
Сообщение от Beermonza Посмотреть сообщение
2) код, который создает два Bitmap'a, одинакового размера (по рамеру PNG-файла), один Bitmap должен содержать цветовые данные из PNG-файла, другой Bitmap, должен содержать маску альфаканала из того же PNG-файла.
Так же с PNGImage:

Код:
procedure TForm1.FormCreate(Sender: TObject);
type
  BGR = packed record
    B: Byte;
    G: Byte;
    R: Byte;
  end;

  TBGR = array [word] of BGR;
var
  PNG: TPNGObject;
  i, j: Integer;
  pngBGR: ^TBGR;
  ImageBGR: ^TBGR;
  Alpha: PByteArray;
  Mask: TBitmap;
  Image: TBitmap;
begin
  
  PNG := TPNGObject.Create;
  PNG.LoadFromFile('C:\2.png');

  Image := TBitmap.Create;
  Image.PixelFormat := pf24bit;
  Image.SetSize(PNG.Width, PNG.Height);

  for i := 0 to PNG.Height - 1 do
  begin
    pngBGR := PNG.Scanline[i];
    ImageBGR := Image.ScanLine[i];
    for j := 0 to PNG.Width - 1 do
    begin
      ImageBGR[j].B := pngBGR[j].B;
      ImageBGR[j].G := pngBGR[j].G;
      ImageBGR[j].R := pngBGR[j].R;
    end;
  end;

  Mask := TBitmap.Create;
  Mask.PixelFormat := pf24bit;
  Mask.SetSize(PNG.Width, PNG.Height);

  for i := 0 to PNG.Height - 1 do
  begin
    Alpha := PNG.AlphaScanline[i];
    ImageBGR := Mask.ScanLine[i];
    for j := 0 to PNG.Width - 1 do
    begin
      ImageBGR[j].B := Alpha[j];
      ImageBGR[j].G := Alpha[j];
      ImageBGR[j].R := Alpha[j];
    end;
  end;

  Mask.SaveToFile('C:\Mask.bmp');
  Image.SaveToFile('C:\Image.bmp');

  PNG.Free;
  Image.Free;
  Mask.Free;
end;
Until The End Of Time

Последний раз редактировалось Showy; 20.11.2008 в 16:53.
Showy вне форума Ответить с цитированием
Старый 20.11.2008, 21:02   #582
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Хм, хорошо, попробую, спасибо!
...сам уже смотрю pngimage.pas, думал ответа не будет
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 20.11.2008, 23:06   #583
Showy
Форумчанин Подтвердите свой е-майл
 
Аватар для Showy
 
Регистрация: 08.08.2007
Сообщений: 183
Сообщение

Слежу за темой. Интересно.
Хотелось хоть как то помочь в развитии проекта.
Until The End Of Time
Showy вне форума Ответить с цитированием
Старый 20.11.2008, 23:12   #584
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Showy, ты уже помог и думаю еще пригодишься, все кто помог в разработке или принял участие пусть и скромное, будет отмечен в кредитах.
...мне уже меньше мороки с подготовкой текстур. Один момент только. Вот эта строчка не работает:
Код:
DstPNG.SetSize(DstPNG.Width + SrcPNG.Width, SrcPNG.Height);
очевидно тут надо:
Код:
DstPNG.Resize(DstPNG.Width + SrcPNG.Width, SrcPNG.Height);
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 20.11.2008, 23:53   #585
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

С разлеплением на цветовые данные и маску аналогично, не работает вот эта запись:
Код:
Image.SetSize(PNG.Width, PNG.Height);
заменил на:
Код:
Image.Width := PNG.Width;
Image.Height := PNG.Height;
Теперь все полностью работает, премного благодарен
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 21.11.2008, 00:12   #586
Showy
Форумчанин Подтвердите свой е-майл
 
Аватар для Showy
 
Регистрация: 08.08.2007
Сообщений: 183
По умолчанию

Странно всю жизнь делал SetSize и сейчас сделал и всё работало
Until The End Of Time
Showy вне форума Ответить с цитированием
Старый 21.11.2008, 14:45   #587
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Возможно, у меня версия подревнее будет, TPNGObject предлагает только Resize(const CX: Integer; const CY: Integer), ...ну ничего, просто открываем уже готовый PNG и прицепляем к нему остальные с изменением размера.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 25.11.2008, 23:10   #588
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию Анимация

Вот как и было обещано, у нас в MMO 2D RPG будет подобная кинематика, ...пока детализация персонажа упрощенная. Заценивайте.
Вложения
Тип файла: zip mmorpg beermonza.zip (104.2 Кб, 165 просмотров)
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 26.11.2008, 12:03   #589
Showy
Форумчанин Подтвердите свой е-майл
 
Аватар для Showy
 
Регистрация: 08.08.2007
Сообщений: 183
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
Вот как и было обещано, у нас в MMO 2D RPG будет подобная кинематика, ...пока детализация персонажа упрощенная. Заценивайте.
Классно сделано!
Until The End Of Time
Showy вне форума Ответить с цитированием
Старый 30.11.2008, 11:28   #590
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию

Впечатляет Заделано прикольно. Чем могу помочь?
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уроки по созданию игр для новичков... -=DeS=- Gamedev - cоздание игр: Unity, OpenGL, DirectX 750 14.11.2017 20:26
Музыка программистов - как вы относитесь к АРИИ? Весёлый Жека Свободное общение 46 10.10.2008 22:32
Конкурсы по созданию игр на Delphi mutabor Свободное общение 0 15.06.2007 12:40
Работа по созданию ПО remix Фриланс 3 22.04.2007 11:00