Показать сообщение отдельно
Старый 24.07.2011, 15:53   #4
Пользователь
 
Регистрация: 04.11.2009
Сообщений: 44
Сказал Спасибо: 57
Имеет 3 спасибок в 2 сообщенях
vahes пока неопределено
По умолчанию

С мемо на форме считываю пакет PledgeCrest в хексе, после определенных переобразований формирую сам пакет по примеру TFixPck, хочу вывести на форму картинку со значком клана, но чет не получается ошибка где-то в функции конвертирования, в чем может быть проблема? Может я неправильно формирую TFixPck. Вот код
Код:
procedure TForm1.Button2Click(Sender: TObject);
Type
TFixPck = packed record case Integer of
    0:(ch:    array[Word] of Char);
    1:(bt:    array[Word] of Byte);
    2:(size: Word; id: Byte; dbt: array[0..65532] of Byte);
end;
var
Bmp: TBitmap;
pck: TFixPck;
s: string;
i: integer;

begin
//Формирую pck
 pck.size:=2+Round(Length(SymbolEntersCount(Memo1.text))/2);
 Edit6.Text:=InvertStr(IntToHex(pck.size,4))+SymbolEntersCount(Memo1.text);
 s:=HexToString(InvertStr(IntToHex(pck.size,4))+SymbolEntersCount(Memo1.text));
 Edit7.Text:=StringToHex(s,'');

 for i:=1 to Length(s) do
     begin
     pck.ch[i]:=s[i];
     pck.bt[i]:=Byte(pck.ch[i]);
     if i=3 then pck.id:=Byte(pck.ch[i]);
     if i>3 then pck.dbt[i-3]:=pck.bt[i];
     end;

 for i:=1 to Length(s) do //смотрю че записало в масивы
     begin
     Edit1.Text:=Edit1.Text+StringToHex(pck.ch[i],' ');
     Edit2.Text:=Edit2.Text+IntToHex(pck.bt[i],2);
     Edit3.Text:=Edit3.Text+IntToHex(pck.dbt[i],2);
     end;
     Edit4.Text:=IntToHex(pck.size,4);
     Edit5.Text:=IntToHex(pck.id,2);

//формирую Bmp
 Bmp:=TBitmap.Create;
 //Bmp.PixelFormat:= pf24bit;
  try begin
      bmp.Width:=DDS_DXT1_To_Bitmap(pck.dbt[8]).width;
      bmp.Height:=DDS_DXT1_To_Bitmap(pck.dbt[8]).height;
      bmp:=DDS_DXT1_To_Bitmap(pck.dbt[8]);
      end;
  except on E : Exception do
      ShowMessage('с картинкой то говнецо  '+E.ClassName+' ошибка: '+E.Message);
      end;
  Image1.Canvas.Draw(0, 0, bmp);
  //Bmp.SaveToFile('c:\test.bmp');
  Bmp.Free;
end;
(Такое количество Editов для мониторинга ибо часто ошибаюсь)
и доп. ф-я для ивертации порядка байт в части размера
Код:
function InvertStr(s: string):string;
var i,j:integer; r: string;
begin
r:=s;
j:=1;
for i:=1 to round(length(s)/2) do
   begin
   r[length(s)-j]:=s[j];
   r[length(s)+1-j]:=s[j+1];
   j:=j+2;
   end;
result:=r;
end;
прошу помощи, совета, критики

все работает прекрасно, bmp:=DDS_DXT1_To_Bitmap(pck.dbt[9]); считывать с 9го байта надо было

Последний раз редактировалось vahes, 24.07.2011 в 16:36. Причина: сам дошел
vahes вне форума   Ответить с цитированием