Имя: Пароль:
1C
1С v8
Получение картинки из Active Directory
0 Наська72
 
24.01.13
03:50
Добрый день! Взываю к вашей помощи, форумчане, ибо совсем задолбалась с 1с.
Итак, задача в числе прочего дернуть из карточки пользователя из Active directory фото и поместить его кое-куда.
На входе получаю ComSafeArray через Stream записываю его. Но это не картинка, это ужас - пара квадратиков в уголочке.

НоваяСтрока.Фото            = obj1.thumbnailPhoto;
...
Stream = Новый COMОбъект("ADODB.Stream");
Stream.Type = 1;//StreamTypeEnum.adTypeBinary;
Stream.Mode = 3;//ConnectModeEnum.adModeReadWrite;
Stream.Open();
Stream.Write(Фото);
Путь = ПолучитьИмяВременногоФайла(".jpg");
Stream.SaveToFile(Путь);//"C:\image.jpg");//SaveOptionsEnum.adSaveCreateNotExist);
Stream.Close();
...

Как получить не сжатое изображение?
Может быть есть другие способы?
HELP!!!!
1 Godofsin
 
24.01.13
05:05
jpg заменить на bmp&
2 Наська72
 
24.01.13
05:48
Пробовала.Эффект такой же.
3 Наська72
 
24.01.13
11:48
Неужели никто таким извратом не занимался?
Может быть есть альтернативные варианты?
Библиотечки какие-нибудь?
4 Наська72
 
25.01.13
12:44
По сути в строке Stream.Write(Фото) под Фото подразумевается ComSafeArray, то есть массив.
Как из ComSafeArray  сделать хотя бы двоичные данные, что бы потом можно было попробовать НовыйКартинка(ДвоичныеДанныеПуть)????
Помогите, пожалуйста!
5 acsent
 
25.01.13
12:48
Ты получаешь thumbnailPhoto а не просто фото
6 Наська72
 
25.01.13
13:04
В чем отличие и как с ним быть?
7 djekting
 
25.01.13
14:22
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Stream=Новый COMОбъект("ADODB.Stream");
   Stream.Type=1;
   Stream.Open();
   Stream.LoadFromFile("C:\БылЗвонок.bmp");
   Connection=Новый COMОбъект("ADODB.Connection");
   Connection.Open("Provider=SQLOLEDB.1; Data Source=NEXTGEN; Initial Catalog=MyBase; User ID=sa;");
   RecordSet=Новый COMОбъект("ADODB.Recordset");
   RecordSet.CursorLocation=3;
   RecordSet.LockType=2;
   Запрос="Select data from dbo.MyTable";
   RecordSet.Open(Запрос, Connection);
   Если RecordSet.RecordCount=0 Тогда
       RecordSet.AddNew();
   //    RecordSet.Fields(0).Value=1;

   Иначе
       RecordSet.MoveFirst();
   КонецЕсли;
   RecordSet.Fields("Data").Value=Stream.Read(-1);
   RecordSet.Update();
   Stream.Close();
КонецПроцедуры

Процедура ОсновныеДействияФормыd(Кнопка)
   Stream=Новый COMОбъект("ADODB.Stream");
   Stream.Type=1;
   Stream.Open();
   Connection=Новый COMОбъект("ADODB.Connection");
   Connection.Open("Provider=SQLOLEDB.1; Data Source=NEXTGEN; Initial Catalog=MyBase; User ID=sa;");
   RecordSet=Новый COMОбъект("ADODB.Recordset");
   RecordSet.CursorLocation=3;
   RecordSet.LockType=2;
   Запрос="Select data from dbo.MyTable";
   RecordSet.Open(Запрос, Connection);
   RecordSet.MoveFirst();
   Stream.Write(RecordSet.Fields("Data").Value);
   Stream.SaveToFile("c:\БылЗвонокВост.bmp");
   Stream.Close();
КонецПроцедуры
8 Наська72
 
28.01.13
06:44
(7) не вижу ничего принципиально нового. У меня так же есть запрос, поле из него тоже через Стрим пишу в файл. Вопрос в другом - почему картинка такая маленькая(сжатая?) и как записать нормально картинку?
9 Наська72
 
28.01.13
06:57
Попробовала следующую схему: ComSafeArray->BASE64->ДвоичныеДанные->Картинка

Всё равно получаю сжатую картинку.
10 Наська72
 
28.01.13
07:35
Всем спасибо. Получилось!
11 vde69
 
28.01.13
08:15
(10) получилось - покажи как :)
12 bse
 
28.01.13
12:48
зажал походу
13 oleg_km
 
28.01.13
13:32
(12) похоже отсыпаться пошел