Вверх ↑
Этот топик читают: Гость
Ответов: 11
Рейтинг: 0
#1: 2020-05-12 17:54:41 ЛС | профиль | цитата
Здравствуйте! Не могу осилить с виду несложную задачку. Нужно принять на вход файл и получить заданное разрешение в точках на дюйм. Не размер файла в пикселях, а именно разрешение, чтобы потом пересчитать физический размер в сантиметрах.
В примерах есть Img_GDIFileProcessor , но он работает через раз, сваливаясь в runtime error на больших картинках. В элементе Jpeg есть множество данных из EXIF , кроме разрешения.
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Разработчик
Ответов: 26061
Рейтинг: 2120
#2: 2020-05-12 19:42:33 ЛС | профиль | цитата
Схема


Add(MainForm,2953706,315,175)
{
}
Add(Img_GDIFileProcessor,2672318,427,210)
{
Point(doGetParamFrom)
Point(onGetParam)
link(onGetParam,14410688:doSeparateMT,[])
}
Add(ODialog,6607378,371,224)
{
Filter="All Image Files|*.bmp;*.gif;*.ico;*wmf;*.emf;*.tif;*.png;*.jpg;*.jpeg|BMP (*.bmp)|*.bmp|JPG (*.jpg, *.jpeg)|*.jpg;*.jpeg|GIF (*.gif)|*.gif|TIFF (*.tif)|*.tif|PNG (*.png)|*.png|ICO (*.ico)|*.ico|EMF (*.emf)|*.emf|WMF (*.wmf)|*.wmf|All files (*.*)|*.*"
FileName=""
link(onExecute,2672318:doGetParamFrom,[])
}
Add(Button,10144938,315,224)
{
Left=20
Top=10
Width=105
TabOrder=-1
Caption="Get DPI"
link(onClick,6607378:doExecute,[])
}
Add(MT_MultiData,14410688,490,217)
{
From=2
link(onData1,14058512:doText,[(529,223)(529,188)])
link(onData2,4928339:doText,[])
}
Add(Edit,14058512,560,182)
{
Left=200
Top=10
Text=""
}
Add(Edit,4928339,560,224)
{
Left=200
Top=35
Text=""
}
Add(Label,1127462,315,112)
{
Left=160
Top=13
Width=33
Height=17
Caption="HDPI:"
}
Add(Label,1847001,301,105)
{
Left=160
Top=37
Width=32
Height=17
Caption="VDPI:"
}

Без проблем читало файлы tiff 45 MB
карма: 22

0
Ответов: 8886
Рейтинг: 823
#3: 2020-05-12 20:21:36 ЛС | профиль | цитата
nesco, кстати, у меня испарился адрес для обновления компонентов, а Img_GDIFileProcessor отсутствует в моей текущей версии HiAsm, подскажи
карма: 19

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#4: 2020-05-12 21:39:50 ЛС | профиль | цитата
Леонид писал(а):
у меня испарился адрес для обновления компонентов

http://svn.hiasm.com/packs
карма: 22

0
Ответов: 8886
Рейтинг: 823
#5: 2020-05-13 00:11:28 ЛС | профиль | цитата
nesco, СПАСИБО! Знал, что не оставите в беде!
карма: 19

0
Ответов: 322
Рейтинг: 8
#6: 2020-05-13 09:26:28 ЛС | профиль | цитата
Ок, разобрался.
СПАСИБО!

Редактировалось 2 раз(а), последний 2020-05-13 09:34:01
карма: 0

0
Ответов: 11
Рейтинг: 0
#7: 2020-05-13 10:57:37 ЛС | профиль | цитата
Да, спасибо, проблема была видимо не в элементе.
Но...
Если через перебор массива набрасывать в Img_GDIFileProcessor много файлов, то время от времени он похоже не успевает обработать картинку.
Это наверное надо решать через WaitObject?
Помогите победить схему, пожалуйста.


Add(MainForm,2953706,434,245)
{
Width=824
Height=574
Caption="Polinoid"
link(onCreate,16008653:doWork3,[(518,265)])
}
Add(MultiElementEx,5726782,532,140)
{
}
BEGIN_SDK
Add(EditMultiEx,12623336,21,21)
{
WorkCount=#6:doData|
Width=447
Height=305
link(doData,7210800:doData,[(101,27)(101,153)])
}
Add(Memory,12742824,182,98)
{
Default=Integer(0)
}
Add(DoData,7210800,182,147)
{
link(onEventData,843041:doEvent1,[])
link(Data,12742824:Value,[])
}
Add(GlobalVar,10999911,266,147)
{
Name="площадь суммарная"
}
Add(GlobalVar,11525907,267,168)
{
Name="погоннаж"
}
Add(Hub,843041,228,147)
{
link(onEvent1,10999911:doValue,[])
link(onEvent2,11525907:doValue,[(254,160)(254,174)])
}
END_SDK
Add(DropFile,5436137,434,203)
{
Point(onStartDrop)
link(onDropFile,7898986:doValue,[(533,209)(533,223)])
link(onEndDrop,9994556:doEnum,[(524,216)(524,272)])
link(onStartDrop,5967209:doEvent1,[])
}
Add(Hub,5967209,483,217)
{
OutCount=3
link(onEvent1,16008653:doWork2,[(506,223)(506,167)])
link(onEvent2,7898986:doClear,[])
link(onEvent3,7289831:doClear,[(540,237)(550,255)(633,255)])
}
Add(HubEx,16008653,514,161)
{
Angle=3
link(onEvent,5726782:doData,[(518,146)])
}
Add(MultiElementEx,7898986,567,217)
{
}
BEGIN_SDK
Add(EditMultiEx,488241,21,21)
{
WorkCount=#7:doValue|7:doClear|8:doDelete|
VarCount=#5:Array|5:Count|
Width=265
Height=172
link(doValue,9106138:doValue,[])
link(doClear,10806814:doClear,[(87,34)(87,90)])
link(Array,10806814:Array,[(27,140)(174,140)])
link(doDelete,10806814:doDelete,[(87,41)(87,97)])
link(Count,10806814:Count,[(34,151)(167,151)])
}
Add(Memory,9106138,70,21)
{
link(onData,1801138:doSearch,[(116,27)(116,63)(51,63)(51,83)])
}
Add(FileSearch,1801138,63,77)
{
Ext="*.jpg"
link(onSearch,10806814:doAdd,[])
link(Dir,9106138:Value,[])
}
Add(StrList,10806814,154,77)
{
}
END_SDK
Add(StringTableMT,7289831,700,266)
{
Left=15
Top=30
Width=775
Height=445
Columns=#5:Заказ|4:Файл|3:DPI|1:S|1:l|
IconsCheck=[]
MiscIcons=[]
Icons=[]
Point(doAutoColWidth)
}
Add(MultiElementEx,3075293,616,266)
{
link(onFString,7289831:doAdd,[])
}
BEGIN_SDK
Add(EditMultiEx,11572533,21,21)
{
WorkCount=#8:doEvent1|
EventCount=#9:onFString|
DataCount=#8:FileName|
Width=783
Height=543
link(doEvent1,1743297:doEvent1,[(59,27)(59,76)])
}
Add(GlobalVar,2293205,252,210)
{
Name="Разрешение"
link(onValue,14187998:doEvent1,[(347,216)(347,251)(170,251)(170,286)])
}
Add(GlobalVar,842333,345,319)
{
Name="Высота"
link(onValue,8571711:doOperation,[])
}
Add(GlobalVar,12121487,427,280)
{
Name="Длина"
}
Add(Img_GDIFileProcessor,2672318,147,182)
{
Quality=1
Point(doGetParamFrom)
Point(onGetParam)
link(onGetParam,14410688:doSeparateMT,[])
}
Add(MT_MultiData,14410688,210,189)
{
Count=4
link(onData1,9673859:doValue,[])
link(onData2,1107971:doValue,[(288,202)(288,204)])
link(onData4,2293205:doValue,[])
}
Add(FilePartElm,12850939,168,70)
{
Mode=0
Point(Part)
link(onPart,10124467:doEnum,[])
}
Add(Str_Enum,10124467,217,70)
{
Delimiter="\"
From=2
To=2
Direct=1
link(onEnum,6809856:doValue,[])
}
Add(GlobalVar,6809856,267,70)
{
Name="заказ"
}
Add(FormatStr,11994376,154,448)
{
DataCount=5
Mask="%1;%2;%5;%3;%4"
link(onFString,11572533:onFString,[(777,454)(777,27)])
link(Str1,15756584:Var,[])
link(Str2,10783620:Var,[(167,436)(165,436)])
link(Str3,6112214:Var,[])
link(Str4,3465037:Var,[])
link(Str5,13924539:Var,[])
}
Add(Hub,1743297,98,70)
{
OutCount=4
link(onEvent1,12850939:doPart,[])
link(onEvent2,3848537:doPart,[(150,83)(150,122)])
link(onEvent3,2672318:doGetParamFrom,[(126,90)(126,202)])
}
Add(GlobalVar,3465037,175,417)
{
Name="Высота"
}
Add(GlobalVar,15756584,154,397)
{
Name="заказ"
}
Add(FilePartElm,3848537,168,116)
{
Mode=2
Point(Part)
link(onPart,12092571:doValue,[])
}
Add(GlobalVar,12092571,218,116)
{
Name="файл"
}
Add(MultiElementEx,3442142,301,280)
{
link(onResult,12121487:doValue,[])
}
BEGIN_SDK
Add(EditMultiEx,16162011,21,21)
{
WorkCount=#11:doOperation|
EventCount=#8:onResult|
Width=377
link(doOperation,5263810:doOperation,[(45,27)(45,69)])
}
Add(Math,5263810,70,63)
{
OpType=3
link(onResult,10401268:doOperation,[])
link(Op2,6281047:Var,[])
}
Add(GlobalVar,6281047,77,35)
{
Name="Разрешение"
}
Add(Math,10401268,116,63)
{
OpType=2
Op2=2.54
link(onResult,9710730:doOperation,[])
}
Add(Math,9710730,162,63)
{
OpType=3
Op2=100
link(onResult,1391549:doOperation,[])
}
Add(Math,1391549,210,63)
{
OpType=35
Op2=0.01
link(onResult,16162011:onResult,[(320,69)(320,27)])
}
END_SDK
Add(MultiElementEx,5007746,302,319)
{
link(onResult,842333:doValue,[])
}
BEGIN_SDK
Add(EditMultiEx,15322925,21,21)
{
WorkCount=#11:doOperation|
EventCount=#8:onResult|
link(doOperation,14210345:doOperation,[(45,27)(45,69)])
}
Add(Math,14210345,84,63)
{
OpType=3
link(onResult,532165:doOperation,[])
link(Op2,12865722:Var,[])
}
Add(GlobalVar,12865722,91,35)
{
Name="Разрешение"
}
Add(Math,532165,130,63)
{
OpType=2
Op2=2.54
link(onResult,16378369:doOperation,[])
}
Add(Math,16378369,176,63)
{
OpType=3
Op2=100
link(onResult,3632639:doOperation,[])
}
Add(Math,3632639,224,63)
{
OpType=35
Op2=0.01
link(onResult,15322925:onResult,[(288,69)(288,27)])
}
END_SDK
Add(Math,8571711,420,319)
{
OpType=2
link(onResult,4374268:doOperation,[])
link(Op2,12121487:Var,[])
}
Add(GlobalVar,855770,507,319)
{
Name="Площадь"
link(onValue,5482169:doOperation,[(582,325)(582,325)])
}
Add(GlobalVar,6112214,168,425)
{
Name="Площадь"
}
Add(GlobalVar,10783620,159,411)
{
Name="файл"
}
Add(Math,4374268,463,319)
{
OpType=35
Op2=0.01
link(onResult,855770:doValue,[])
}
Add(DoData,9807438,252,280)
{
link(onEventData,3442142:doOperation,[])
link(Data,9673859:Value,[(258,261)(293,261)])
}
Add(Memory,9673859,287,189)
{
}
Add(Memory,1107971,361,198)
{
}
Add(DoData,16031684,249,319)
{
link(onEventData,5007746:doOperation,[])
link(Data,1107971:Value,[(295,313)(295,268)(367,268)])
}
Add(Hub,14187998,182,280)
{
OutCount=3
link(onEvent1,9807438:doData,[])
link(onEvent2,16031684:doData,[(222,293)(222,325)])
link(onEvent3,4879653:doOperation,[(212,300)(212,377)])
}
Add(GlobalVar,15304964,596,291)
{
Name="площадь суммарная"
}
Add(GlobalVar,9951223,351,343)
{
Name="погоннаж"
}
Add(Math,5482169,589,319)
{
link(onResult,14029977:doValue,[])
link(Op2,15304964:Var,[])
}
Add(GlobalVar,14029977,635,319)
{
Name="площадь суммарная"
}
Add(Math,4879653,344,371)
{
link(onResult,12503020:doValue,[])
link(Op1,842333:Var,[(350,352)(351,352)])
link(Op2,9951223:Var,[])
}
Add(GlobalVar,12503020,390,371)
{
Name="погоннаж"
link(onValue,11994376:doString,[(471,377)(471,415)(142,415)(142,454)])
}
Add(GlobalVar,13924539,182,426)
{
Name="Разрешение"
}
END_SDK
Add(Hub,13172651,616,371)
{
link(onEvent1,12425147:doData,[])
link(onEvent2,14631460:doEvent1,[(637,384)(637,461)])
}
Add(Memory,1490711,651,329)
{
Default=String(-1)
}
Add(DoData,12425147,651,371)
{
link(onEventData,7289831:doAutoColWidth,[(691,377)(691,293)])
link(Data,1490711:Value,[])
}
Add(Label,16411778,840,588)
{
Left=15
Top=480
Width=75
Height=17
Caption="Всего файлов"
}
Add(Label,14672968,837,585)
{
Left=15
Top=495
Width=87
Height=17
Caption="Общая площадь"
}
Add(Label,3627675,831,579)
{
Left=15
Top=510
Width=55
Height=17
Caption="Погоннаж"
}
Add(Label,1120127,753,424)
{
Left=105
Top=480
Width=10
Height=17
Caption="0"
link(Text,7289831:Count,[(759,361)(706,361)])
}
Add(Label,8321607,754,502)
{
Left=105
Top=495
Width=10
Height=17
Caption="0"
link(Text,12038742:Var,[])
}
Add(Label,1684434,754,574)
{
Left=105
Top=510
Width=10
Height=17
Caption="0"
link(Text,2783336:Var,[])
}
Add(GlobalVar,12038742,754,473)
{
Name="площадь суммарная"
}
Add(GlobalVar,2783336,754,546)
{
Name="погоннаж"
}
Add(Hub,14631460,644,455)
{
OutCount=3
link(onEvent1,1120127:doText,[(706,461)(706,430)])
link(onEvent2,8321607:doText,[(706,468)(706,508)])
link(onEvent3,1684434:doText,[(694,475)(694,580)])
}
Add(Label,3759047,827,624)
{
Left=15
Top=5
Width=118
Height=22
Font=[Verdana,12,0,8388736,0]
Caption="Полинойд 1.2"
}
Add(ArrayEnum,9994556,567,266)
{
link(onItem,3075293:doEvent1,[])
link(onEndEnum,13172651:doEvent1,[(607,279)(607,377)])
link(Array,7898986:Array,[])
}
Add(PointHint,6207285,515,109)
{
Info=#16:Сброс переменных|
Transparent=0
VAlign=0
Width=75
Height=72
}
Add(PointHint,15735823,606,214)
{
Info=#19:Сбор данных о файле|
Transparent=0
VAlign=0
Width=61
Height=93
}




Редактировалось 2 раз(а), последний 2020-05-13 10:58:32
карма: 0

0
Ответов: 4621
Рейтинг: 746
#8: 2020-05-13 11:31:51 ЛС | профиль | цитата
Видимо, не все программы сохраняют разрешение. Вот в HiAsm когда компонентом Jpeg сохраняешь - там ведь нигде не указываешь DPI.
карма: 26

0
Ответов: 11
Рейтинг: 0
#9: 2020-05-13 11:35:14 ЛС | профиль | цитата
Netspirit писал(а):
Видимо, не все программы сохраняют разрешение. Вот в HiAsm когда компонентом Jpeg сохраняешь - там ведь нигде не указываешь DPI.

Да, не все. В конкретной задаче у всех файлов признак есть. Проблема лишь возникает только когда скидываешь на обработку слишком много файлов. Если порции поменьше, то все работает.
DPI это своего рода "пятая нога", он не всегда нужен как атрибут. Только в подобных моей задачах, когда надо пересчитать физический размер печати при известных длине и ширине и dpi.

Редактировалось 1 раз(а), последний 2020-05-13 11:36:43
карма: 0

0
Ответов: 4621
Рейтинг: 746
#10: 2020-05-13 11:43:01 ЛС | профиль | цитата
dimazelensky писал(а):
DPI это своего рода "пятая нога", он не всегда нужен как атрибут
Ну, это зависит от задач. Он оказывается нужным когда надо сохранить подготовленный файл для последующей распечатки или распечатать полученный откуда-то файл. Без него размер печатного изображения придётся придумывать самому.
карма: 26

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#11: 2020-05-13 13:31:09 ЛС | профиль | цитата
dimazelensky писал(а):
Помогите победить схему

А кто мешает по окончанию заполнения таблицы проверить на наличие нулевых разрешений и перечитать эти позиции повторно? Установить таких проходов, к примеру, два. После второго прохода считать, что разрешение действительно нулевое.
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#12: 2020-05-13 16:58:30 ЛС | профиль | цитата
Netspirit писал(а):
Видимо, не все программы сохраняют разрешение.

nesco писал(а):
После второго прохода считать, что разрешение действительно нулевое.

dimazelensky писал(а):
Проблема лишь возникает только когда скидываешь на обработку слишком много файлов.
Если порции поменьше, то все работает.
Читать умеем ?
где-то у тебя в вычислениях собака зарыта. Завтра постараюсь посмотреть
Вот >7000 файлов и Img_GDIFileProcessor "успевает".

Редактировалось 2 раз(а), последний 2020-05-13 18:12:54
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 5227
Рейтинг: 586
#13: 2020-05-13 18:44:07 ЛС | профиль | цитата
как вариант
Add(MainForm,2953706,56,105)
{
Width=467
}
Add(VBJScript,10331549,245,105)
{
WorkPoints=#6:doWork|
EventPoints=#5:Width|6:Height|10:PixelDepth|10:Resolution|
Script=#7:Dim img|18:Sub doWork(dt,idx)|41: Set img = CreateObject("WIA.ImageFile")|17: img.LoadFile dt|21: sys.Width img.Width|23: sys.Height img.Height|31: sys.PixelDepth img.PixelDepth|72: sys.Resolution img.VerticalResolution & "x" & img.HorizontalResolution|19: Set img = Nothing|8:End Sub |
link(Width,12661613:doWork2,[])
link(Height,13523628:doWork2,[])
link(PixelDepth,2385052:doWork2,[])
link(Resolution,2385052:doWork3,[(298,132)])
}
Add(Memo,3960772,357,105)
{
Left=210
Top=25
Width=170
Height=165
}
Add(Button,6462800,119,105)
{
Left=25
Top=40
link(onClick,2039386:doExecute,[])
}
Add(HubEx,12661613,322,105)
{
link(onEvent,3960772:doAdd,[])
}
Add(ODialog,2039386,182,105)
{
link(onExecute,10331549:doWork,[])
}
Add(HubEx,13523628,308,112)
{
link(onEvent,12661613:doWork3,[(326,118)])
}
Add(HubEx,2385052,294,119)
{
link(onEvent,13523628:doWork3,[(312,125)])
}


Редактировалось 1 раз(а), последний 2020-05-13 18:47:11
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 16884
Рейтинг: 1239
#14: 2020-05-15 11:08:13 ЛС | профиль | цитата
И зачем почти двукратное превышение необходимого числа компонент ?

Редактировалось 1 раз(а), последний 2020-05-15 14:59:15
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
14
Сообщение
...
Прикрепленные файлы
(файлы не залиты)