|
1С искажает картинку при сохранении файл EMF | ☑ | ||
---|---|---|---|---|
0
SgBe
20.09.13
✎
17:10
|
Загружаю в хранилище значений картинку в формате EMF. При выводе этой картинки на форму документа (справочника) или в табличный документ все выводится нормально, с учетом, конечно, конвертации в растровый формат.
При сохранении этой же картинки в файл формата EMF, программно средствами 1С, происходит искажение картинки. Проявляется в пропадании отдельных символов в надписях на картинке (картинка - это чертеж). Сталкивался ли кто-нибудь с подобным явлением и, если сталкивался, то как поборот? |
|||
1
SgBe
23.09.13
✎
14:47
|
Ап...
|
|||
2
kosts
23.09.13
✎
14:52
|
Сохраняй из хранилища, а не с формы
|
|||
3
SgBe
23.09.13
✎
15:02
|
Я так и делаю - сохраняю из хранилища.
|
|||
4
kosts
23.09.13
✎
18:51
|
Ну код выложи, может кто-то, что-то подскажет...
|
|||
5
SgBe
26.09.13
✎
15:18
|
Код:
Картинка = Стр.Изображение.Получить(); Картинка.Записать(ПутьКВременномуФайлуКартинки); Стр - строка табличной части документа. Изображение - хранилище значений. Исходная картинка в формате EMF. Никаких преобразований с ней не делаю, тем более, что 1С не умеет работать с векторным форматом. |
|||
6
kosts
26.09.13
✎
18:58
|
> Загружаю в хранилище значений картинку
Загружаешь в хранилище из файла и сохраняешь в файл и при этом файл изменяется? |
|||
7
Базис
naïve
26.09.13
✎
19:00
|
Там где-нибудь вариант вида файла (бинарный или текстовый) не может встречаться?
|
|||
8
SgBe
27.09.13
✎
11:29
|
(6) Да, именно так. Причем, как писал в (0) в хранилище картинке нормальная - не искаженная, т.к. на форму документа (справочника), в табличный документ, выводится все нормально.
А при сохранении в файл - искажается. Пробовал сохранять через ДвоичныеДанные - так же искажается. (7) Нет у метода Записать() таких параметров. |
|||
9
SgBe
27.09.13
✎
11:34
|
Не оставляет ощущение, что такая фигня появилась на одном из последних релизов 1С, т.к., до этого система эксплуатировалась почти год и все, вроде бы, было нормально.
Сейчас стоит 8.2.18.109. |
|||
10
SgBe
27.09.13
✎
11:56
|
Вот сами картинки:
http://s1.ipicture.ru/uploads/20130927/1V457H66.jpg Правильная - справа, она находится на форме документа, слева - файл EMF. |
|||
11
kosts
27.09.13
✎
12:14
|
Попробуй для обхода проблемы зазиповать файл перед сохранением из файла в хранилище (в 1с есть zip). Ну и при сохранении в файл обратно распаковать.
И проверь "Картинка" в реквизитах или на форме нет ли (так на всякий случай). Картинка = Стр.Изображение.Получить(); Картинка.Записать(ПутьКВременномуФайлуКартинки); Ну и для теста в отдельной обработке попробуй сохранить в хранилище и обратно в файл. Поменяется ли... |
|||
12
SgBe
27.09.13
✎
13:59
|
(11) У меня такая последовательность:
1. В конструкторской программе создается чертеж в формате EMF. Хранится он в SQL базе. 2. Через ADO я вытаскиваю этот чертеж и, без промежуточного сохранения в файл, записываю его в ХранилищеЗначений в 1С. 3. Затем, при подготовке документов, я формирую файл RTF и в него вставляю этот чертеж (EMF). Перед вставкой в RTF, я сохраняю чертеж в файл и из файла уже в RTF. ЗаписьZipФайла в 1С записывает в ZIP только файлы, т.е., я запишу в архив уже искаженный файл. Есть ли возможность записать в ZIP ДвоичныеДанные без сохранения их (ДвоичныхДанных) в файл? |
|||
13
SgBe
27.09.13
✎
15:00
|
Уточнение к (12).
В хранилище я все-таки записываю через создание временного файла. Код: Поток = Новый ComОбъект("ADODB.Stream"); Поток.Type = 1; Поток.Open(); Поток.Write(НаборЗаписей.Fields("pic").Value); Поток.SaveToFile(ПутьКВременномуФайлуКартинки,2); Поток.Close(); МояКартинка = Новый Картинка(ПутьКВременномуФайлуКартинки); СтепеньСжатия = Новый СжатиеДанных(9); ХранилищеКартинки = Новый ХранилищеЗначения(МояКартинка, СтепеньСжатия); НаборЗаписей - это ADO.Recordset Fields("pic").Value - картинка из внешней SQL базы Т.е, получается, что SaveToFile(ПутьКВременномуФайлуКартинки,2) сохраняет картинку без искажений, а Картинка.Записать(ПутьКВременномуФайлуКартинки) - искажает! |
|||
14
kosts
27.09.13
✎
15:12
|
(13) >Т.е, получается, что SaveToFile(ПутьКВременномуФайлуКартинки,2) сохраняет картинку без искажений, а Картинка.Записать(ПутьКВременномуФайлуКартинки) - искажает!
Вот мне и кажется, что ты Картинка.Записать() не из хранилища сохраняешь, а из картинки так сказать. В этот момент и происходит преобразование... проверь логику программы. |
|||
15
SgBe
27.09.13
✎
16:25
|
(14)>ты Картинка.Записать() не из хранилища сохраняешь, а из картинки
Да, нет... Я же в (5) привел код, которым картинку сохраняю. В (10) я дал ссылку на картинку как это все выглядит. Обе картинки получены из одного хранилища. |
|||
16
SgBe
30.09.13
✎
13:55
|
Поговорю пока сам с собою...
Установив дедуктивным методом, что SaveToFile(ПутьКВременномуФайлуКартинки,2) сохраняет картинку без искажений, а Картинка.Записать(ПутьКВременномуФайлуКартинки) - искажает, вижу путь для обхода проблемы: Писать в файл через ADODB.Stream метод SaveToFile(). Однако, не могу подсунуть этому ADODB.Stream'у в метод Write() данные из 1С. Даю Картинка.ПолучитьДвоичныеДанные() не принимает - ошибка в параметре. Опять - что делать? |
|||
17
kosts
30.09.13
✎
14:05
|
При сохранении в БД сохраняй как двоичные данные, а не как картинка.
Вот как в СП.
|
|||
18
SgBe
30.09.13
✎
14:13
|
Спасибо. За общение, прежде всего.
Ваш совет сейчас опробую, только сложность в том, что не все картинки искажаются. Т.е., код я сейчас поменяю на ваш, но вот ловить надо будет, помогло или нет! |
|||
19
kosts
30.09.13
✎
14:17
|
(18) Т.е. для одной и той же картинки по разному, то меняется, то нет? Если так, то это грустно...
|
|||
20
SgBe
30.09.13
✎
14:56
|
(17) Сделал сохранение картинки в БД 1С через ДвоичныеДанные.
То же самое - картинка искажается. Что делать-то... :,-( |
|||
21
kosts
30.09.13
✎
15:00
|
Выложи одну картинку куда нибудь, тоже попробую...
|
|||
22
SgBe
30.09.13
✎
15:04
|
(19) Нет, не так. Если картинка искажается, то искажается гарантировано - всегда!
Не все картинки искажаются, т.е., на 100 картинок 1 (условно) искажается. |
|||
23
SgBe
03.10.13
✎
17:54
|
Реабилитировал 1С. Оказывается, кривая картинка приходит из конструкторской программы. Причем, внутри программы, как и в 1С, отображается эта картинка правильно.
При этом, при просмотре картинки в CorelDraw, в ней присутствуют все размеры. Но при этом видно, что объекты (отдельные циферки) перекрывают друг друга При просмотре гляделками от Microsoft (другие не пробовал) циферок не хватает. Сейчас бодаемся с разработчиками конструкторской программы. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |