Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2012, 18:06   #11
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Нет нужды в цикле, читаем справку по HexToBin внимательно !
вполне достаточно 1 строки кода, и лишний поток тоже не нужен.
Код:
HexToBin(PAnsiChar(str), PAnsiChar(Arr), Length(Arr));
запись в поток (который зачем-то как вар параметр передаётся, лучше конечно const) надо делать примерно так, и тоже без цикла:
Код:
stre.Write(Pointer(Arr), Length(Arr));
phomm вне форума Ответить с цитированием
Старый 17.08.2012, 02:37   #12
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Так а что конкретно не получается?
Вот тут ( url ) есть пример работы с изображениями...Правда там доступ к БД идет через посторонний провайдер, но смысл остается тот же...
Насколько я понял, ты с БД работаешь через стандартные компоненты в Delphi?
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 21.08.2012, 09:30   #13
{Shadowevil}
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 52
По умолчанию

Цитата:
Сообщение от spamer Посмотреть сообщение
Так а что конкретно не получается?
Вот тут ( url ) есть пример работы с изображениями...Правда там доступ к БД идет через посторонний провайдер, но смысл остается тот же...
Насколько я понял, ты с БД работаешь через стандартные компоненты в Delphi?
Нет, используются не стандартные компоненты)
Проблему решил, всем, кто пытался помочь, спасибо

Решил следующим образом:

Код:

//Это накопал в инете
Type
 TMyMemoryStream = class(TMemoryStream)
  public
    procedure SetMemPointer(Ptr: Pointer; Size: Longint);
  end;

.............
//Ваш код
.............

//Это тоже накопал в инете
procedure TMyMemoryStream.SetMemPointer(Ptr: Pointer; Size: Integer);
begin
  SetPointer(Ptr, Size);
end;

............
//Какой то Ваш код
............

//Это моя процедура по преобразованию
Procedure TFrmMain.HexToBMP(Str: String; var img: TBitMap);
var
  i, j, Len: integer;
  Arr : array of Byte;
  Stream: TMyMemoryStream;
  s: String;
  jpg: TJPEGImage;
begin
 s:=Copy(Str, 1, 4);
 Stream:=TMyMemoryStream.Create;
 Len := Length(Str) div 2 - 2;
 SetLength(Arr, Len);

 i:=1;
 while i<Len do
 begin
  j:=StrToInt('$'+Str[(i*2)-1]+Str[i*2]);
  Arr[i-1]:=j;
  i:=i+1;
 end;
 Stream.SetMemPointer(Pointer(Arr), Len);
 img:=TBitMap.Create;
 if s='ffd8' then
 begin
  jpg:=TJPEGImage.Create;
  jpg.LoadFromStream(Stream);
  img.Assign(jpg);
 end else
  img.LoadFromStream(Stream);

 FreeAndNil(Stream);
end;
В чем суть: Мы передаем один аргумент Str - это Hex строка из БД (или еще откуда-нибудь), по 2 бита преобразовываем её в байтовый массив, потом загоняем его в поток и уже оттуда грузим.
Второй аргумент Img - выходящее изображение.

Когда пытался сделать на выходе поток - столкнулся с проблемой невозможности передачи потока между модулями.

Пример использования:
Код:
procedure TFrmMain.Button1Click(Sender: TObject);
var
  img: TBitmap;
begin
  ZQuery1.SQL.Clear;
  ZQuery1.SQL.Add('SELECT data FROM table WHERE id='+id);
  ZQuery1.Open;

  StrToBMP(ZQuery1.FieldByName('data').AsString, img);
  Image2.Picture.Assign(img);

  FreeAndNil(img);
end;
Может кому-нибудь понадобится
{Shadowevil} вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка изображения iiunbreakableii Общие вопросы Delphi 1 13.02.2011 20:30
загрузка изображения wlords Помощь студентам 3 24.11.2010 20:52
Загрузка изображения _-Re@l-_ Общие вопросы Delphi 7 31.05.2010 14:54
Загрузка изображения из exe Volkogriz Общие вопросы Delphi 13 18.01.2010 17:51
Загрузка изображения JRcoker Мультимедиа в Delphi 15 04.11.2008 18:32