Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Найдите ошибку

7.9K
22 августа 2007 года
Crainov
39 / / 04.06.2006
Вот код вывода изображения на экран. Если изображение не содержит альфа-канала то отрисовывается правильно а если содержит то вообще не отрисовывается
Код:
procedure DrawBGRAOnBitmap(Bitmap: TBitmap; bgr: Pointer; xStart, yStart, xFinish, yFinish: Integer);
var
 X, Y: Integer;
 pColor: PByteArray;
 alpha: real;
 Data: PByte;
begin
Data:=bgr;
 for Y:=yStart to yFinish - 1 do
  begin
   pColor:=Bitmap.ScanLine[Y];
    for X:=xStart to xFinish - 1 do
     begin
      case Data^ of
       0: begin end;
       255: begin
                   inc(Data);
                  pColor[X * 4]:= Data^;
                   inc(Data);
                  pColor[X * 4 + 1]:= Data^;
                   inc(Data);
                  pColor[X * 4 + 2]:= Data^;
                   inc(Data);
           end
         else
         begin
       alpha:=Data^ / 255;
         inc(Data);
       pColor[X * 3]:=Round(Data^ * alpha + pColor[X * 4] * (1 - alpha));
         inc(Data);
       pColor[X * 3 + 1]:=Round(Data^ * alpha + pColor[X * 4 + 1] * (1 - alpha));
         inc(Data);
       pColor[X * 3 + 2]:=Round(Data^ * alpha + pColor[X * 4 + 2] * (1 - alpha));
         inc(Data);
         end;
     end;
    end;
   end;
  end;
16K
22 августа 2007 года
Zbyszek
118 / / 08.08.2007
Не уверен,что это то, что нужно, но посмотри здесь. И ещё вот это.
1.8K
23 августа 2007 года
rSolanov
106 / / 04.05.2005
Как я понял, этот код - не вывод изображения на экран, а код
создания битовой карты. Возможно, ошибка кроется именно в выводе битмапа на устройство (например, оконный элемент).
7.9K
23 августа 2007 года
Crainov
39 / / 04.06.2006
Битмап выводится на канву формы. Как я уже писал раньше без альфы изображение выводится.
До этого я из памяти(с указателя Data) записывал в массив данные цветов и потом уже назначал по сканлайну и всё работало - может проблемма неправильгого получения даных из памяти.
1.8K
24 августа 2007 года
rSolanov
106 / / 04.05.2005
Насколько я знаю прозрачные битмапы поддерживает GDI лишь в Виндовс начиная с Windows2000. Я сталкивался с работой битмапа, но пользовался не GDI, как в твоём случае, а OpenGL. И если битмап собран правильно, то выводился без проблем. Поэтому, раз у тебя битмап без альфа-составляющей выводится правильно, скорее всего битмап собираешь правильно и с прозрачностью. Скорее всего эту прозрачность не поддерживает версия Windows, который у тебя установлен. Также как вариант, пожно покопаться в свойствах канваса.
Думаю, что дело не в битмапе. Можешь проверить свой битмап, организовав его вывод на оконный элемент средствами OpenGL. Это тебе даст убедиться в том, правильный ли битмап выводишь, либо нет.
7.9K
24 августа 2007 года
Crainov
39 / / 04.06.2006
Цвет пикселя я ведь уже просчитываю заранее так что причина не в Bitmap.
Когда проверяется наличие альфы и происходит перенаправление на обсчёт её то сдесь как-будто бы теряется указатель (т.е все данные которые далее пдаются для расчётов равны нулю)(переписывал в другой участок памяти и сохранял в файл - все данне это нули).
7.9K
27 августа 2007 года
Crainov
39 / / 04.06.2006
Нетб ну это надо же быть настолько тупым. Так и знал. Внимательно просмотрите код. Когда альфа = 0 тогда идёт такой код begin end; А указатель памяти не смещается поэтому достаточно одного пикселя полностью прозрачного чтобы ничего не отрисовалось.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог