Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Обработка 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.06 c
1-1268122509
Сергей М.
2010-03-09 11:15
2013.03.22
AV при использовании юнита Variants


2-1336713116
igorium
2012-05-11 09:11
2013.03.22
ShellTreeView и папка "Рабочий стол"


4-1264071675
Омлет
2010-01-21 14:01
2013.03.22
Восстановить путь ключа реестра по HKEY


15-1335276392
Anton Nagornyi
2012-04-24 18:06
2013.03.22
Халтура. BASS обработка звука


15-1344457802
Юрий
2012-08-09 00:30
2013.03.22
С днем рождения ! 9 августа 2012 четверг





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский