Главная страница
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.48 MB
Время: 0.06 c
15-1336640074
jacksotnik
2012-05-10 12:54
2013.03.22
Можно ли в DesignMode открыть закрыть модуль зная его имя?


15-1350904692
Newersim
2012-10-22 15:18
2013.03.22
Помогите перевести пару строк на с++


15-1346212466
Al2017
2012-08-29 07:54
2013.03.22
Не выходит задать течение нескольких несвязанных труб


1-1297432162
Gu
2011-02-11 16:49
2013.03.22
Доверие виндов


15-1353797738
DevilDevil
2012-11-25 02:55
2013.03.22
Перехватить любой Exception и подменить текст