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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование строки в массив структур. 
V
    Опции темы
CynicRus
Дата 31.5.2013, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Приветствую уважаемых форумчан. Имеется массив структур в котором содержатся значения типа:
Код

TRGB32 = packed record
    B, G, R, A: Byte;
  end;


Так же имеется структура:
Код

TRGB24 = packed record
    B, G, R : byte;
  end;


Собственно мне нужно этот массив структур засунуть в строку, что я и пытаюсь сделать следующим способом:
Код

var
  i : integer;
  DestLen : longword;
  DataStr : string;
  CorrectData : PRGB24;
begin
  SetLength(DataStr,w*h*3);
 //getmem(correctdata, w*h*3);
  CorrectData:= PRGB24(@DataStr[1]);
  for i := w*h - 1 downto 0 do
  begin
    CorrectData^[i].R := FData^[i].R;
    CorrectData^[i].G := FData^[i].G;
    CorrectData^[i].B := FData^[i].B;
  end;

Тип PRgb24 - указатель на массив TRGB24. В вышеприведённом коде, каждый раз при попытке записать в преобразованную строку - я получаю ошибку записи, в строке CorrectData^[i].R := FData^[i].R;. Так вот собственно вопрос, как мне преобразовать этот самый массив структур TRGB32 в строку в виде массива TRGB24. 

PS: Оу, чего-то я заработался. Тема должна называться запись массива структур в строку. Чем-то не тем я подумал, когда название темы писал-(


Это сообщение отредактировал(а) CynicRus - 31.5.2013, 09:14
PM MAIL   Вверх
CynicRus
Дата 31.5.2013, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Заработало вот в таком виде:
Код

var
  i : integer;
  DestLen : longword;
  DataStr : string;
  CorrectData : TRGB24Array;
begin
  SetLength(DataStr,w*h*3);
  CorrectData:= TRGB24Array(@DataStr[1]);
  for i := w*h - 1 downto 0 do
  begin
    CorrectData[i].R := FData^[i].R;
    CorrectData[i].G := FData^[i].G;
    CorrectData[i].B := FData^[i].B;
  end;

Но я так и не понял, почему не захотело работать через указатель.
PM MAIL   Вверх
Чучмек
Дата 31.5.2013, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

Репутация: 14
Всего: 41



Код

var
  s:ansistring;
  mRGB24:array[0..?] of TRGB24;
  L:integer;
begin
L:=length(mRGB24);
SetLength(s,L*sizeof(TRGB24));
for i:=0 to  L-1 do
  PRGB24(@s[i*sizeof(TRGB24)+1])^:=mRGB24[i];
end;




--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
CynicRus
Дата 31.5.2013, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Чучмек @ 31.5.2013,  09:47)
Код

var
  s:ansistring;
  mRGB24:array[0..?] of TRGB24;
  L:integer;
begin
L:=length(mRGB24);
SetLength(s,L*sizeof(TRGB24));
for i:=0 to  L-1 do
  PRGB24(@s[i*sizeof(TRGB24)+1])^:=mRGB24[i];
end;


Супер. Спасибо!

Теперь в работоспособно состоянии это выглядит вот так:
Код

var
  i : integer;
  DestLen : longword;
  DataStr,S : string;
  CorrectData : TRGB24;
begin
  SetLength(DataStr,w*h*3);
  for i := w*h - 1 downto 0 do
  begin
    CorrectData.R := FData^[i].R;
    CorrectData.G := FData^[i].G;
    CorrectData.B := FData^[i].B;
    PRGB(@DataStr[i*sizeof(TRGB24)+1])^:=CorrectData;
  end;
  if compress(pbyte(BufferString),destlen,Pbyte(DataStr),w*h*3) = Z_OK then
  begin;
    SetLength(DataStr,DestLen);
    move(bufferstring[0],dataStr[1],DestLen);
    result := 'm' + Base64EncodeStr(datastr);
  end;
end;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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