GraphicsNET (GraphicsVK) - внешняя компонента для работы с графическими изображениями
Ежедневно приходится грузить большое количество картинок в базу данных. Чтобы автоматизировать процесс изменения размеров написал внешнюю компоненту для работы с изображениями. Хотя функционал не ограничивается одним только ресайзингом.
02.09.2010 11:58 [01.10.2010 10:48] 58 [+] [−] Перейти к публикации
Есть еще вопрос!
Открываю png с прозрачным фоном, меняю размер изображения (растягиваю водяной знак ) потом сохраняю ... и получаю что прозрачный фон заменен на белый.
вкФайлКопирайта.ИзменитьРазмерИзображения(Ширина, Высота, 0, Ложь);
вкФайлКопирайта.СохранитьИзображение("tmp.png", 2, 0, Ложь);
Можно как нибудь сделать , чтоб прозрачный фон сохранялся?
Ответили: (19)
При наложении в цикле водяного знака (при вызове ДобавитьВодянойЗнак) течет память.
Потом показывается ошибка
GraphicsVK : Some operation could not be performed because the system is out of resources. Close some windows and try again..
Потом
GraphicsVK : Access violation at address 073932D4 in module 'GraphicsVK.dll'. Write of address 00000000 и еще что-то.
И вылетает 1с. Файл подкачки вырастает почти на 1 гб...
Если надо могу пример обработки под 8.1.
Насколько помню вот так с ходу:
1. Не используй Tbitmap
2. Преобразования и битовые операции делай через BitBlt и маски
3. Все перечисленные объекты должны позволять работать не использая Bitmap
4. Самое узкое место всегда тут будет Tbitmap , пробуй указатели либо там есть еще какой то "тип" данных (не помню уже точно) - это даст экономию памяти, а использование процедур апи и работы с маской значительный прирост=)
(28) Добавил метод "Закрыть()"
При вызове метода высвобождается память занимаемая объектом.
Т.е. порядок работы следующий
| Код |
|---|
Компонента.ПолучитьИзображение(...); // Различные манипуляции с изображением Компонента.xxxx(); Компонента.xxxx(); Компонента.СохранитьИзображение(...); Компонента.Закрыть(); |
(47) Видел я эту библиотеку. Да функционал у нее богаче, НО!
1) С ее помощью не нашел как добавлять без заморочек водяной знак
2) GraphicsNET - лишь часть (которой решил поделится) большой компоненты , используемой в моей конфигурации.
Согласитесь, удобнее пользоваться одной компонентой и, что не мало важно, дорабатывать ее функционал, чем использовать несколько различных решений.
Ответили: (50)
Хелп, протестил компоненту 1С 8.2. все работает!
а на 1С 77 не работает, что может быть?
ЗагрузитьВнешнююКомпоненту(ПолныйПутьККомпоненте);
ГрафикаВК = СоздатьОбъект("AddIn.GraphicsNET");
| Код |
|---|
Пока Цикл ГрафикаВК.ПолучитьИзображение(ПутьКФайлуИсточник); Размер = Число(-30); ГрафикаВК.ИзменитьРазмерИзображения(ГрафикаВК.Ширина,,Размер,1); Сжатие = Число(50); ТипФайла = "jpg"; ГрафикаВК.СохранитьИзображение(ПутьКФайлуСохранение,ТипФайла,Сжатие,0); КонецЦикла; ГрафикаВК.Закрыть(); |
Повторюсь, на 1с82 на том же компе работает
Ответили: (57)
ок, спасибо,работает, воспользовался GraphicsVK, её проще удаленно зарегистрировать regsvr32
Ответили: (59)
Мне главное сжать размер до 10%, остальное неважно
Есть проблема,
Пользуюсь все же:
| Код |
|---|
ЗагрузитьВнешнююКомпоненту("GraphicsVK.dll");
ГрафикаВК = СоздатьОбъект("AddIn.GraphicsVK"); |
Все работает, но, пока программу не завершить (1cv77.exe), папка сохранения фотографий залочена компонентой, не удалить.
Даже если:
| Код |
|---|
Процедура ПриЗакрытии() ГрафикаВК = 0; КонецПроцедуры |
Есть золотая библиотека cxImage к которой также написаны ActiveX. Не требует dotnet. Советую для конвертирования, изменения, сжатия изображений.
Хорошая компонента, но у меня не получилось ее запустит на сервере.
Насколько я понимаю загвоздка в:
| Код |
|---|
ПодключитьВнешнююКомпоненту("AddIn.GraphicsNET"); |
В таком виде запуск на сервере не возможен, а как изменить для регистрации на сервере так и не разобрался. Для данной библиотеки это возможно?
Ответили: (68)
Не могу подключить к 7-ке. Windows XP, DLL-ка находится в BIN 1С-ки
на
| Код |
|---|
ПодключитьВнешнююКомпоненту(GraphicsNET.dll);
GraphicsVK = СоздатьОбъект("AddIn.GraphicsVK");
|
Ошибка при создании объекта из компоненты <Неизвестная компонента> (отсутствует CLSID)
GraphicsVK = СоздатьОбъект("AddIn.GraphicsVK");
{F:\BASE\...\PRICE.ERT(975)}: Неудачная попытка создания объекта (AddIn.GraphicsVK)
а на
| Код |
|---|
ЗагрузитьВнешнююКомпоненту(GraphicsNET.dll);
GraphicsVK = СоздатьОбъект("AddIn.GraphicsVK");
|
Ошибка при создании объекта из компоненты C:\Program Files\1Cv77\BIN\GraphicsNET.dll (отсутствует интерфейс IInitDone)
GraphicsVK = СоздатьОбъект("AddIn.GraphicsVK");
{F:\BASE\...\PRICE.ERT(977)}: Неудачная попытка создания объекта (AddIn.GraphicsVK)
Ответили: (75)
| Код |
|---|
ЗагрузитьВнешнююКомпоненту(<ПутьКDLL>);
Graphics = СоздатьОбъект("AddIn.GraphicsNET"); |
58 [+] [−] Перейти к публикации
Исправил недочет с прозрачными областями png при наложении "водяного знака"