Вопрос по Canvas.CopyRect... (PNG & TPicture)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Вопрос по Canvas.CopyRect... (PNG & TPicture)

Сообщение Andreich » 31.01.2010 20:35:35

Всем доброго времени суток! В кратце обрисую проблему: имеется PNG изображение 400x40 пикселей с прозрачным фоном (т.е. 10 спрайтов 40x40). Нужно загрузить эти изображения в массив hero. Загрузка производиться копированием кусочков из исходного изображения. Вся загвоздка заключается в том, что получаемые изображения содержат на фоне вместо прозрачности всякий мусор! Приведу используемый код, закоментированные строчки чистят канву в принудительном порядке, но это приводит с потере прозрачности.

Буду признателен за любые комментарии.

Код: Выделить всё
var hero : array [0..9] of TPicture;
...
procedure TMainForm.LoadHero;
var i : integer;
    temp : TPicture;
begin
  temp:=TPicture.Create;
  temp.LoadFromFile('images/hero.png');
  for i:=0 to 9 do
  begin
    hero[i]:=TPicture.Create;
    hero[i].PNG.Width:=40;
    hero[i].PNG.Height:=40;
   // hero[i].PNG.Canvas.Pen.Color:=clWhite;
   // hero[i].PNG.Canvas.Brush.Color:=clWhite;
   // hero[i].PNG.TransparentColor:=clWhite;
   // hero[i].PNG.Transparent:=true;
   // hero[i].PNG.Canvas.Rectangle(0,0,40,40);
    hero[i].PNG.Canvas.CopyRect(rect(0,0,40,40),temp.PNG.Canvas,rect(i+i*40,0,i+(i*40)+40,40));
  end;
  Image.Canvas.Draw(10,10,hero[1].png);
  temp.Free;
end;


Пробовал пересобирать Lasarus по предложенному вот здесь варианту, но результат тот же самый. :( Полупрозрачность на просто размещенной на форме картинке появляется, но указанный код все расно работает с "шумом" на канве.
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Вопрос по Canvas.CopyRect... (PNG & TPicture)

Сообщение hinst » 31.01.2010 22:04:20

а вы попробуйте перед копированием на hero[i] заливать его белым!
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Вопрос по Canvas.CopyRect... (PNG & TPicture)

Сообщение Andreich » 31.01.2010 22:09:08

hinst писал(а):а вы попробуйте перед копированием на hero[i] заливать его белым!

Так ведь закомментированные строки (см. код в первом посте) как раз это и делают,.. при таком варианте проблем нет. Но меня интересует получение полупрозрачности!

В ходе "экспериментов" удалось выяснить, что изображение temp само по себе прозрачно, если его выводить на image, но тоже без полупрозрачности.
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Вопрос по Canvas.CopyRect... (PNG & TPicture)

Сообщение hinst » 31.01.2010 22:24:30

ну так, блин, всё правильно. вы создаёте картинку, присваиваете ей размер; оно выделяет память, память не инициализирована, и в ней всякая каша. потом вы на этой каше рисуете свою картинку. и она рисуется на каше. а что вы хотели?
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Вопрос по Canvas.CopyRect... (PNG & TPicture)

Сообщение Andreich » 31.01.2010 22:35:24

Шум, каша,.. как ни назови. ) Я прекрасно понимаю, что избавится от этого можно залив спрайт блелым фоном. Но мне больше интересно, как убрать шум, сохранив при этом прозрачность PNG. Вот в чем вопрос!
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Вопрос по Canvas.CopyRect... (PNG & TPicture)

Сообщение hinst » 31.01.2010 22:37:29

есть у меня серьёзное подозрение, что это Not implemented yet... вероятно и логично предположить, что copyRect не поддерживает копирование прозрачности
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 59

Рейтинг@Mail.ru