Главная страница
    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.075 c
15-1336631511
jacksotnik
2012-05-10 10:31
2013.03.22
Корректное сохранение файла


4-1259572252
keymaster
2009-11-30 12:10
2013.03.22
Работа с POS-принтером.


2-1343717574
AV
2012-07-31 10:52
2013.03.22
Поток, организация проверки раз в секунду PostThreadMessage


15-1343203415
Dmitry
2012-07-25 12:03
2013.03.22
Работа в США


15-1346099401
Юрий
2012-08-28 00:30
2013.03.22
С днем рождения ! 28 августа 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
Английский Французский Немецкий Итальянский Португальский Русский Испанский