Имя: Пароль:
1C
1С v8
Парсинг и обрезка картинок
0 Мистикан
 
04.06.15
05:56
Есть векторная рисовалка Vector.Drawning, в которой производится прорисовка развижной светопрозрачной конструкции. Компонента сохраняет рисунок в файл, который потом хранится в хранилище. Но картинка при сохранении не обрезается, а сохраняет все поле. И получается что 50-70% сохраненной картинки -  это пустое поле.
Хочется обрезать эту картинку. Только не представляю, как это сделать, точнее через какую компоненту.
1 ЧеловекДуши
 
04.06.15
06:30
(0) Векторным рисункам побоку на пустое пространство :)

Вот если ты Пишешь в BMP, то тогда не побоку.
Ну и тут есть такая вещь, как Архивирование, перед записью.

И так же Хранилище Архивирует содержимое перед записью :)
2 DJ Anthon
 
04.06.15
07:28
(1) может, ему просто не нравится, как оно после этого выглядит
3 Мистикан
 
04.06.15
07:32
(2) Не нравится как это потом выходит на печать в договоре. Мелко получается, бабульки не видят xD
4 DJ Anthon
 
04.06.15
07:34
попиксельно бегаешь вокруг области и стираешь по столбцу-строке. процесс можно анимировать и вывести с какими-нибудь спецэффектами, типа развлекаловка. можно пакмана прикрутить.
5 Мистикан
 
04.06.15
07:38
(4) не это извращение. проще по-моему найти первую последнюю координату по Х и У, в которой пиксель не совпадает с цветом фона, и обрезать.
Вопрос то собственно, какой компонентой это сделать =) желательно еще методы получения цвета и обрезки к ней =)
6 Мистикан
 
04.06.15
07:40
просто той компонентой которой рисую, там жестокое извращение, которое к тому же и тормозить начинает.. 10сек обработка 1 картинки. Нужна какая нить растровая компонента, желательно с пакета .Net
7 DJ Anthon
 
04.06.15
07:40
ну я это, в принципе, в виду и имел.
http://delphicomponent.ru/454-komponent-raboty-s-graficheskimi-faylami-timage.html
и вперед. ты программист или где?
8 Мистикан
 
04.06.15
07:43
я дельфи последний раз трогал 10 лет назад в универе =) да и то спец был не программирование, так что писали мы мало
9 Мистикан
 
04.06.15
07:47
такс.. вроде что то нашел. выложу готовое решение

ПодключитьВнешнююКомпоненту("Elisy.NetBridge4");
AddIn = New("AddIn.ElisyNetBridge4");
net = AddIn.GetNet();
net.LoadAssembly("System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
outputBitmap = net.New("System.Drawing.Bitmap", width, height);
g = net.CallStatic("System.Drawing.Graphics", "FromImage", outputBitmap);
g.CompositingQuality = net.New("System.Drawing.Drawing2D.CompositingQuality").HighQuality;
g.SmoothingMode = net.New("System.Drawing.Drawing2D.SmoothingMode").HighQuality;
g.InterpolationMode = net.New("System.Drawing.Drawing2D.InterpolationMode").HighQualityBicubic;
g.Clear(net.GetStatic("System.Drawing.Color", "WhiteSmoke"));

sx = width / Bitmap.Width;
sy = height / Bitmap.Height;
scale = Мин(sx, sy);
g.DrawImage(bitmap, Окр((outputBitmap.Width - scale * bitmap.Width) / 2, 0), Окр((outputBitmap.Height - scale * bitmap.Height) / 2, 0), Окр(scale * bitmap.Width, 0), Окр(scale * bitmap.Height, 0));
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан