Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TBitmap. Из массива, в массив и получение пикселя. 
V
    Опции темы
CynicRus
Дата 8.4.2014, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: 2
Всего: 5



Приветствую уважаемых форумчан.  Возникла проблема. Есть класс с полями Width,Height и полем Data - которое является указателем на массив TRGBTriple.

Загружаю в него так:

Код

procedure TDTMBitmap.LoadFromBitmap(Bitmap: TBitmap);
var
  i,j,l: integer;
  Pixels: PPixelArray;
begin
   Reset;
   Width:=Bitmap.Width;
   Height:=Bitmap.Height;
    //SetSize(Bmp.Width,Bmp.Height);
   GetMem(FData,Width * Height * SizeOf(TRGBTriple));
   l:=width*height;
   Bitmap.PixelFormat := pf24bit;
  for i := bitmap.Height - 1 downto 0 do
  begin
   Pixels:=bitmap.ScanLine[i];
   for j :=bitmap.Width - 1  downto 0  do
    begin
     //move(FData,Pixels^,Bitmap.Width);
       FData^[l]:=Pixels[j];
       dec(l);
    end;
  end;
end;


Выгружаю обратно в TBitmap:
Код

var
 i,j,dd: integer;
 Pixels: pPixelArray;
begin
   dd:=width*height;
   bmp.PixelFormat := pf24bit;
   bmp.Width  := width;
   bmp.Height := height;
   for i := Bmp.Height - 1 downto 0 do
  begin
   Pixels:=Bmp.ScanLine[i];
  // move(Pixels,FData^[I*Width],Width);
   for j :=Bmp.Width - 1  downto 0  do
    begin
    Pixels[j]:=FData^[dd];
    dec(DD);
    end;
  end;
end;


Всё прекрасно работает, загружается куда надо, сохраняется как надо. Но, есть необходимость получать цвет пикселя по координатам на картинке. 

Пробую вот так:
Код

result:=RGBTripleToColor(Data^[y*width+x]);


Функция преобразования цвета:
Код

function TDTMBitmap.RGBTripleToColor(const RGBTriple: TRGBTriple): TColor;
begin
Result:= RGBTriple.rgbtBlue shl 16 + RGBTriple.rgbtGreen shl 8 +
 RGBTriple.rgbtRed;
end;


Получается некий цвет пикселя. 
Проверяю: 
 загружаю из файла в обычный TBitmap картинку, загружаю её в свой класс. Беру по Canvas.Pixels[x,y] цвет пикслея, беру из своего класса цвет пикселя - а они разные. И чего-то я могз себе сломал. вот что я не так делаю? Неправильно загружаю - выгружаю из массива? Тогда как это сделать правильно? Или же я неправильно определяю индекс в воображаемой матрице из моего массива?
PM MAIL   Вверх
Alexeis
Дата 8.4.2014, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



  Возможно не учитывается то что компоненты цвета в битмапе pf24bit идут не в порядке RGB, а в порядке BGR . Canvas.Pixels[x,y] же всегда конвертирует RGB.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
CynicRus
Дата 8.4.2014, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: 2
Всего: 5



Ан нет, решение тривиальнее. Так как индексация идёт с 0, следовало при загрузке в массив переменную L указать как width*height - 1. И всё заработало как часы.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.