Консультация № 110251
20.11.2007, 10:46
0.00 руб.
0 2 2
Здравстуйте, уважаемые эксперты!
Имеется две иконки.

Var ic1,ic2:TIcon;s:string;

В первой УЖЕ загружена картинка. Необходимо каким-то образом сохранить содержимое первой иконки в строку s, и загрузить из строки во вторую иконку! Как это сделать? (Хочу переслать иконку по UDP протоколу). Пожалуйста, помогите, плиз!!!

Обсуждение

Неизвестный
20.11.2007, 11:09
общий
это ответ
Здравствуйте, Александр Леонидович!
странно конечно картинку загружать в строку, но ладно...
Вам сначала надо вытащить из иконки два битмапа (изображение и маска)
пример можете посмотреть тут:
http://delphiworld.narod.ru/base/ico_to_glyph.html
потом преобразовать кажды пиксел битмапов в строку, так же не забудьте запоминать формат битмапов (высота ширина)
теперь можете передавать строку
после этого из полученной строки составляете битмапы преобразовывая строки в цвета пикселов
(надеюсь с пробразованием цвет-строка-цвет Вы разберетесь)
теперь надо только создать иконку из изображения и маски - вот так:
http://delphiworld.narod.ru/base/bmp_to_ico.html
Неизвестный
20.11.2007, 12:44
общий
это ответ
Здравствуйте, Александр Леонидович!

Сохранить иконку в строку Вы можете через поток.
Смотри пример ниже. Здесь Иконка основной формы сохраняется в файл на диске, через строкковый поток. Доступ к строке потока Вы можете осуществить через: BufString.DataString.

Возможно, Вам не требуется использование String? Ведь, если Вы можете загрузить иконку в поток, этот поток Вы можете использовать для передачи по сокету, наряду с методом передачи строки существует метод передачи буфера (т.е. данных потока).

Приложение:
procedure TForm1.Button1Click(Sender: TObject);var OutIcon: TIcon; BufString: TStringStream;begin OutIcon := TIcon.Create; BufString := TStringStream.Create(‘‘); try Icon.SaveToStream(BufString); BufString.Seek(0, soFromBeginning); OutIcon.LoadFromStream(BufString); OutIcon.SaveToFile(‘out.ico‘); finally OutIcon.Free; BufString.Free; end;end;
Форма ответа