Имя: Пароль:
1C
1С v8
Как получить картинку из строки
,
0 maxp77
 
25.10.11
13:21
Как получить картинку из строки strP (строка шестнадцатиричных значений), выгруженную следующим паскалевским кодом:

     MS:=TMemoryStream.Create;
     try
       TBlobField(___.FieldByName('PORTRAIT')).SaveToStream(MS);
       MS.Seek(0, soFromBeginning);
       for i:=0 to MS.Size-1 do
       begin
         MS.Read(Buf, 1);
         strP:=strP+DecToHex(Buf);
       end;
     finally
       MS.Free;
     end;
1 Scooter
 
25.10.11
13:23
(0)преобразуй в зад
2 maxp77
 
25.10.11
13:24
(1) Мне из 1С это сделать надо, а не из Паскаля
3 mikecool
 
25.10.11
13:25
(2) а в картинку незя было сохранить?
4 mikecool
 
25.10.11
13:26
+3 tbmp, tjpg  и прочая не судьба было заюзать?
5 maxp77
 
25.10.11
13:27
(3) да, не я сохранял; не мой это код, но мне из этой выгрузки картинки извлекать надо.
6 Maxus43
 
25.10.11
13:31
(5) ну напиши на паскале преобразование в зад, а потом уже в 1с грузи. в 1с нет просто DecToHex и наоборот
7 Maxus43
 
25.10.11
13:31
или сам функции преобразования пиши...
8 mikecool
 
25.10.11
13:32
попробуй скормить объекту ДвоичныеДанные, если получится
9 Maxus43
 
25.10.11
13:34
(8) врятли, формат картинки поковеркан уже
10 maxp77
 
25.10.11
13:37
(8) - пробовал, по логике надо как-то скомпоновать(склеить) двоичные данные из наборов Buf по 2 символа:
Buf:=HexToDec(Следующие_2_символа)
11 Maxus43
 
25.10.11
13:39
какой тайный смысл преследовал создатель когда увеличивал объём картинки в 2 раза при выгрузке кстати?)
12 mikecool
 
25.10.11
13:39
если сохранить строку в файл, потом
Новый ДвоичныеДанные(ЭтотФайл)
потом ДвоичныеДанные.Записать("1.jpg") - не получится картинка?
13 maxp77
 
25.10.11
13:39
(11) по-быстрее выгрузку написать известным ему преобразованием картинки в строку
14 mikecool
 
25.10.11
13:40
(13) ппц, про объекты для работы с картинками этот автор не знал? ))
15 Maxus43
 
25.10.11
13:41
в файле то кстати так и идёт? типа "FAEBD7..."?
16 maxp77
 
25.10.11
13:42
(14) это автор мне еще с пренебрежением пишет:
>  Что 1С не умеет хранить картинки в базе? В чём проблема?
>  1С не имеет функций работы в 16-тиричной системе,и закодировать картинку как строку невозможно?
17 maxp77
 
25.10.11
13:43
(15) FFD8FFE000104A46494600010201004800480000FF .....
18 mikecool
 
25.10.11
13:45
(16) так и ответь - всякую куйню в картинки преобразовывать не может
заюзай тжипег и сохрани файло как патсан
19 Maxus43
 
25.10.11
13:46
(16) 1с как раз умеет хранить даже фильмы в базе, это автор не умеет
wiki:Шестнадцатеричные_числа
20 Maxus43
 
25.10.11
13:47
Например, требуется перевести шестнадцатеричное число 5A3 в десятичное. В этом числе 3 цифры. В соответствии с вышеуказанным правилом представим его в виде суммы степеней с основанием 16:

5A316 = 3·160+10·161+5·162
= 3·1+10·16+5·256 = 3+160+1280 = 144310

в 1с напиши алгоритм
21 Maxus43
 
25.10.11
13:48
(20) + форматирование не правильное, смотри в (19)
22 maxp77
 
25.10.11
13:51
(21) как перевести в десятичное - понятно, а как потом полученное десятичное значение в двоичные данные впихнуть, хотя бы в файл этот байт засунуть?
23 Maxus43
 
25.10.11
13:58
в файл записывать "Символ(<Код символа>)"?
24 maxp77
 
25.10.11
14:00
Попробую через ЗаписьТекста, но сильно сомневаюсь в результате

<Код символа> = HexToDec()

Запись=Новый ЗаписьТекста("ХЗ.jpg",КодировкаТекста.ANSI);
Запись.Записать(Символ(<Код символа>));
Запись.Закрыть();
25 Maxus43
 
25.10.11
14:03
я тож сомневаюсь)
в паскале может написать преобразование? иль в любом языке где есть удобные инструменты работы с файлами?
26 mikecool
 
25.10.11
14:04
накуя городить огород, если автор паскаля может сделать сразу файло?
прошу прощения за ругательство )
27 mikecool
 
25.10.11
14:04
+26 файло = файло картинки
28 Maxus43
 
25.10.11
14:09
(26) видимо не может, раз делал преобразование в текст) редкий изврат на мой взгляд...
29 mikecool
 
25.10.11
14:10
(28) вот это и бесит иногда, строят из себя невесь что, а нормально выполнить работу не могут ((
30 maxp77
 
25.10.11
16:05
Танец с бубном не удался - Unicode, а нужен ANSI - наверное, из-за этого ничего не вышло.

Встроенные функции языка (Script functions)
Символ (Char)
Синтаксис:
Символ(<КодСимвола>)
Параметры:
<КодСимвола> (обязательный)
Тип: Число. Код получаемого символа. Код задается в соответствии с кодировкой Unicode.

Если ЗначениеЗаполнено(СтрокаБл) Тогда
   СтрокаБлДлина = СтрДлина(СтрокаБл);
   Запись = Новый ЗаписьТекста("D:\TEMP\укоНа", КодировкаТекста.ANSI);
   Для СчетчикБл = 1 По Окр(СтрокаБлДлина/2) Цикл
       _Код_символа = HexToDec(Сред(СтрокаБл, 1 + (СчетчикБл - 1)*2, 2));
       Запись.Записать(Символ(_Код_символа));
   КонецЦикла;
   Запись.Закрыть();
   ВыбранноеИзображение = Новый Картинка("D:\TEMP\укоНа", Ложь);
   ХранилищеФото = Новый ХранилищеЗначения(ВыбранноеИзображение, Новый СжатиеДанных);
КонецЕсли