Главная страница
    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.079 c
15-1353837763
dummy_user
2012-11-25 14:02
2013.03.22
Вставка текста из .pas в .txt.


15-1351974603
Юрий
2012-11-04 00:30
2013.03.22
С днем рождения ! 4 ноября 2012 воскресенье


2-1336222680
Глеб
2012-05-05 16:58
2013.03.22
Редактирование надписей в компоненте едит


15-1344231937
картман
2012-08-06 09:45
2013.03.22
извините, пожалуйста, забыл


15-1339778375
TUser
2012-06-15 20:39
2013.03.22
Лапша





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский