Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Обработка 32-битного PNG с помощью ScanLine   Найти похожие ветки 

 
Jimmy   (2012-04-11 14:12) [0]

Не удается обработать 32-битный PNG с альфа-каналом следующим кодом:

procedure TForm1.Button1Click(Sender: TObject);
const
 MaxPixelCountA = MaxInt div SizeOf(TRGBQuad);
type
 PRGBAArray = ^TRGBAArray;
 TRGBAArray = array[0..MaxPixelCountA-1] of TRGBQuad;
Var   RowFrom  :  PRGBAArray;
     R,G,B,T:Byte;
     i,j:Integer;
     PG:TPNGObject;
begin
PG:=TPNGObject.Create;
PG.LoadFromFile("1.png");
For i := PG.Height-1 downto 0 do
   begin
   RowFrom   := pRGBAArray(PG.Scanline[i]);
   for j:=0 to PG.Width-1 do
       begin
       R :=RowFrom[j].rgbRed;
       G :=RowFrom[j].rgbGreen;
       B :=RowFrom[j].rgbBlue;
       begin T:=R; R:=B; B:=T; end;
       end;
   RowFrom[j].rgbRed:=R;
   RowFrom[j].rgbGreen:=G;
   RowFrom[j].rgbBlue:=B;
   end;
Form1.Canvas.Draw(10,10,PG);
PG.Free;
end;

Подскажите, почему? Использую компонент PNGImage. Заранее спасибо!


 
CRLF   (2012-04-11 14:30) [1]

Что конкретно не удаётся?


 
Jimmy   (2012-04-11 14:32) [2]

PNG-рисунок не изменяется, но появляются какие-то лишние полосы.


 
Jimmy   (2012-04-11 15:10) [3]

А по задумке должны меняться красная и синяя составляющие каждого пикселя.


 
icWasya ©   (2012-04-11 15:38) [4]

Ну вот сам же написал
 for j:=0 to PG.Width-1 do // цикл по строке
      begin // начало тела цикла
      R :=RowFrom[j].rgbRed;
      G :=RowFrom[j].rgbGreen;
      B :=RowFrom[j].rgbBlue;
      begin T:=R; R:=B; B:=T; end; // что-то с чем-то поменяли местами
      end; // конец цикла
 // следующий код выполнится только когда дойдём до конца строки
 // и к этому времени переменная j будет иметь неопределённое значение
  RowFrom[j].rgbRed:=R;
  RowFrom[j].rgbGreen:=G;
  RowFrom[j].rgbBlue:=B;
 // итого присвоение будет идти непонятно куда
 //


 
Jimmy   (2012-04-11 15:43) [5]

Это, конечно, я глупо ошибся. Однако, если операторные скобки закрыть правильно, все равно не работает!



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.053 c
2-1329256529
Deltas
2012-02-15 01:55
2013.03.22
Что за... сообщение в Delphi XE2.


15-1339412694
NieL
2012-06-11 15:04
2013.03.22
ошибка xml


15-1334950195
Брррр!
2012-04-20 23:29
2013.03.22
Компиляция ассемблера


15-1328905805
Юрий
2012-02-11 00:30
2013.03.22
С днем рождения ! 11 февраля 2012 суббота


15-1333823439
antonn
2012-04-07 22:30
2013.03.22
Сколько стоит такой специалист