Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с pngimage 
:(
    Опции темы
igorx86
Дата 20.7.2009, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 8.10.2006

Репутация: нет
Всего: нет



Доброго времени суток!

Не могли бы подсказать, как получить доступ к пикселам картинки необращая внимание на альфа канал?

Заранее спасибо!
PM MAIL   Вверх
Alexeis
Дата 20.7.2009, 09:27 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(igorx86 @  20.7.2009,  00:00 Найти цитируемый пост)
Не могли бы подсказать, как получить доступ к пикселам картинки необращая внимание на альфа канал?

  Насколько я помню у него есть 2 свойства Scanline для основного цвета и AlpaScanline для прозрачности, аналогично классу TBitmap.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
igorx86
Дата 20.7.2009, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 8.10.2006

Репутация: нет
Всего: нет



а если альфа канал выступает в виде градиента? то так быть?
PM MAIL   Вверх
AntonN
Дата 20.7.2009, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 7
Всего: 18



если не нужно обращать внимания на альфаканал, то не все ли равно как он выглядит? smile


--------------------
user posted image
PM MAIL WWW   Вверх
igorx86
Дата 21.7.2009, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 8.10.2006

Репутация: нет
Всего: нет



просто мне нужно преобразовать png в bmp необращая внимания на альфа канал
PM MAIL   Вверх
AntonN
Дата 21.7.2009, 07:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 7
Всего: 18



ну и переводи, зачем тогда про градиент-альфу спрашиваешь? smile
Код

var PNB:TPngObject; b1:TBitmap;
begin
  b1:=TBitmap.Create;
  PNB:=TPngObject.Create;
  try
      PNB.LoadFromFile('c:\1.png');
      pnb.CreateAlpha;
      b1.Assign(pnb);
  finally
    b1.Free;
    PNB.Free;
   end;



--------------------
user posted image
PM MAIL WWW   Вверх
igorx86
Дата 23.7.2009, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 8.10.2006

Репутация: нет
Всего: нет



Цитата(AntonN @ 21.7.2009,  07:52)
ну и переводи, зачем тогда про градиент-альфу спрашиваешь? smile
Код

var PNB:TPngObject; b1:TBitmap;
begin
  b1:=TBitmap.Create;
  PNB:=TPngObject.Create;
  try
      PNB.LoadFromFile('c:\1.png');
      pnb.CreateAlpha;
      b1.Assign(pnb);
  finally
    b1.Free;
    PNB.Free;
   end;

если использовать этот код, то из такой картинки user posted image 
получается такая 
user posted image

того я и спрашивал, как перегнать из одного формата в другой, необращая внимания на альфа канал
PM MAIL   Вверх
AntonN
Дата 23.7.2009, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 7
Всего: 18



Цитата

того я и спрашивал, как перегнать из одного формата в другой, необращая внимания на альфа канал 

правильно, получится такая картинка, потому что ты не обращаешь внимания на альфаканал.
А вот то, тчо ты хочешь - это называется "с учетом альфаканала". Более того, тут еще один фактор - сам фон, на который с помощью альфы оно и рисуется.
В примере сделал просто одноцветный фон, для наглядности. Указываешь файл png, задаешь имя сохраняемого bmp и получаешь его с цветом указанного фона и картинкой поверх.
Код
procedure RenderPNG2BMP(file_png,file_bmp:string; background_color:tcolor);
const
  MaxPixelCountA = MaxInt div SizeOf(TRGBQuad);
type
  PRGBAArray = ^TRGBAArray;
  TRGBAArray = array[0..MaxPixelCountA-1] of TRGBQuad;
var Bt:TBitmap; PNB:TPngObject; RBT:PRGBAArray; aaa:pByteArray;
    x,y,tmp:integer; rc1, bc1, gc1:byte;
begin
  bt:=TBitmap.Create;
  PNB:=TPngObject.Create;
  try
    PNB.LoadFromFile(file_png);
    pnb.CreateAlpha;
    bt.Assign(pnb);
    bt.PixelFormat:=pf32bit;

    for y:=0 to bt.Height-1 do begin
        RBT:=bt.ScanLine[y];
        aaa:=pnb.AlphaScanline[y];
        for x:=0 to bt.Width-1 do begin
          RBT[x].rgbReserved:=aaa[x];
        end;
    end;

    rc1:=GetRValue(background_color);
    gc1:=GetGValue(background_color);
    bc1:=GetBValue(background_color);

    for y:=0 to bt.Height-1 do begin
        RBT:=bt.ScanLine[y];
        for x:=0 to bt.Width-1 do begin

          tmp:=round((1-(RBT[x].rgbReserved/255))*rc1+(RBT[x].rgbReserved/255)*RBT[x].rgbRed);
          if tmp>255 then tmp:=255 else if tmp<0 then tmp:=0;
          RBT[x].rgbRed:=tmp;

         tmp:=round((1-(RBT[x].rgbReserved/255))*gc1+(RBT[x].rgbReserved/255)*RBT[x].rgbGreen);
          if tmp>255 then tmp:=255 else if tmp<0 then tmp:=0;
          RBT[x].rgbGreen:=tmp;

          tmp:=round((1-(RBT[x].rgbReserved/255))*bc1+(RBT[x].rgbReserved/255)*RBT[x].rgbBlue);
          if tmp>255 then tmp:=255 else if tmp<0 then tmp:=0;
          RBT[x].rgbBlue:=tmp;
        end;
    end;

    bt.SaveToFile(file_bmp);

  finally
    bt.Free;
    pnb.Free;
  end;
end;



--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.1460 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.