Как быстро получить параметры графич. файла: 1)размер 2)разрешение 3)глубина цвета - VB
Формулировка задачи:
Относит. простой надеюсь вопрос.
Вопрос связан с моими последними темами:
1) размер
чтобы понять, надо ли переворачивать картинку и вписывать "в размер"
2) разрешение
чтобы понять удовлетворяет ли разрешение тому чего хотим 204х196 или 204х98
также чтобы понять не сжата ли картинка вдвое по высоте,если это tiff 204х98
3) глубина цвета (цветная or b/w)
чтобы понять надо ли применять HALFTONE
4) ?компрессия g3/g4/lzw (для tiff)
Все это есть обычно в свойствах файла
Размер конечно можно узнать так(Dimension):
Причем охота узнать сразу и быстро, до того как дербанить файл через GDI.
Ну, допустим разрешение и размер я через GDI узнаю, не дербаня файла, а как исх.глубину палитры узнать все равно не знаю пока.
Смысл в том, что у нас на входе м.б. правильный уже файл, а мы его дербаним: вертим, масштабируем, мажем полутонами.
При этом еще тратим время и ресурсы.
Т.е. хочется сразу сразу понять: ТЫ КТО?
Чтобы наметить с ним ЧЕГО С ТОБОЙ ДЕЛАТЬ
Вопрос связан с моими последними темами:
1) размер
чтобы понять, надо ли переворачивать картинку и вписывать "в размер"
2) разрешение
чтобы понять удовлетворяет ли разрешение тому чего хотим 204х196 или 204х98
также чтобы понять не сжата ли картинка вдвое по высоте,если это tiff 204х98
3) глубина цвета (цветная or b/w)
чтобы понять надо ли применять HALFTONE
4) ?компрессия g3/g4/lzw (для tiff)
Все это есть обычно в свойствах файла
Размер конечно можно узнать так(Dimension):
Но это через одно место, тем более виста/win7 засаживают размер в 31-й параметр а не в 26-й
Причем охота узнать сразу и быстро, до того как дербанить файл через GDI.
Ну, допустим разрешение и размер я через GDI узнаю, не дербаня файла, а как исх.глубину палитры узнать все равно не знаю пока.
Смысл в том, что у нас на входе м.б. правильный уже файл, а мы его дербаним: вертим, масштабируем, мажем полутонами.
При этом еще тратим время и ресурсы.
Т.е. хочется сразу сразу понять: ТЫ КТО?
Чтобы наметить с ним ЧЕГО С ТОБОЙ ДЕЛАТЬ
Решение задачи: «Как быстро получить параметры графич. файла: 1)размер 2)разрешение 3)глубина цвета»
textual
Листинг программы
<font color="blue">Public</font> <font color="blue">Function</font> showEXIFTags(<font color="blue">ByVal</font> sFilename <font color="blue">As</font> <font color="blue">String</font>) <font color="blue">As</font> <font color="blue">String</font> <font color="blue">Dim</font> retStatus <font color="blue">As</font> Status <font color="blue">Dim</font> m_img <font color="blue">As</font> <font color="blue">Long</font> <font color="blue">Dim</font> PropertyCount <font color="blue">As</font> <font color="blue">Long</font> <font color="blue">Dim</font> prop <font color="blue">As</font> GDIPPropertyItem <font color="blue">Dim</font> i <font color="blue">As</font> <font color="blue">Long</font> <font color="blue">Dim</font> sItem <font color="blue">As</font> <font color="blue">String</font> <font color="blue">Dim</font> j <font color="blue">As</font> <font color="blue">Long</font> <font color="blue">Dim</font> v <font color="blue">As</font> Variant <font color="blue">Dim</font> s <font color="blue">As</font> <font color="blue">String</font> <font color="blue">Dim</font> strFull <font color="blue">As</font> <font color="blue">String</font> strFull = <font color="teal">""</font> retStatus = Execute(StartUpGDIPlus(GdiPlusVersion)) <font color="blue">If</font> retStatus = OK <font color="blue">Then</font> GdipInitialized = True <font color="blue">Else</font> showEXIFTags = <font color="teal">"GDI Problem!"</font> <font color="blue">Exit</font> <font color="blue">Function</font> <font color="blue">End</font> <font color="blue">If</font> retStatus = Execute(GdipLoadImageFromFile(StrPtr(sFilename), m_img)) <font color="blue">If</font> retStatus = OK <font color="blue">Then</font> <font color="blue">Call</font> Execute(GdipGetPropertyCount(m_img, PropertyCount)) <font color="blue">For</font> i = <font color="darkblue"><b>1</b></font> <font color="blue">To</font> PropertyCount <font color="blue">Set</font> prop = PropertyItem(i, PropertyCount, m_img) sItem = CStr(i) & <font color="teal">" "</font> & prop.<font color="blue">Name</font> & <font color="teal">" "</font> <font color="blue">Select</font> <font color="blue">Case</font> prop.ItemType <font color="blue">Case</font> PropertyTagTypeASCII sItem = sItem & prop.ParseString() <font color="blue">Case</font> PropertyTagTypeRational, PropertyTagTypeSRational <font color="blue">For</font> j = <font color="darkblue"><b>1</b></font> <font color="blue">To</font> prop.ValueCount <font color="blue">If</font> (j > <font color="darkblue"><b>1</b></font>) <font color="blue">Then</font> sItem = sItem & <font color="teal">", "</font> <font color="blue">End</font> <font color="blue">If</font> v = prop.ParseRational(j) <font color="#00AA00">'sItem = sItem & v(1) & <font color="teal">"/"</font> & v(2)</font> sItem = sItem & CStr(v(<font color="darkblue"><b>1</b></font>) / v(<font color="darkblue"><b>2</b></font>)) <font color="blue">Next</font> j <font color="blue">Case</font> PropertyTagTypeLong <font color="blue">For</font> j = <font color="darkblue"><b>1</b></font> <font color="blue">To</font> prop.ValueCount <font color="blue">If</font> (j > <font color="darkblue"><b>1</b></font>) <font color="blue">Then</font> sItem = sItem & <font color="teal">", "</font> <font color="blue">End</font> <font color="blue">If</font> sItem = sItem & prop.ParseLong(j) <font color="blue">Next</font> j <font color="blue">Case</font> PropertyTagTypeShort <font color="blue">For</font> j = <font color="darkblue"><b>1</b></font> <font color="blue">To</font> prop.ValueCount <font color="blue">If</font> (j > <font color="darkblue"><b>1</b></font>) <font color="blue">Then</font> sItem = sItem & <font color="teal">", "</font> <font color="blue">End</font> <font color="blue">If</font> sItem = sItem & prop.ParseShort(j) <font color="blue">Next</font> j <font color="blue">Case</font> PropertyTagTypeUndefined <font color="blue">ReDim</font> b(<font color="darkblue"><b>0</b></font> <font color="blue">To</font> prop.ValueCount - <font color="darkblue"><b>1</b></font>) <font color="blue">As</font> <font color="blue">Byte</font> prop.GetData b <font color="blue">For</font> j = <font color="darkblue"><b>1</b></font> <font color="blue">To</font> prop.ValueCount - <font color="darkblue"><b>1</b></font> <font color="blue">If</font> (j > <font color="darkblue"><b>1</b></font>) <font color="blue">Then</font> sItem = sItem & <font color="teal">" "</font> <font color="blue">End</font> <font color="blue">If</font> s = Hex(b(j - <font color="darkblue"><b>1</b></font>)) <font color="blue">If</font> Len(s) = <font color="darkblue"><b>1</b></font> <font color="blue">Then</font> s = <font color="teal">"0"</font> & s sItem = sItem & s <font color="blue">Next</font> j <font color="blue">Case</font> <font color="blue">Else</font> sItem = sItem & prop.ItemType & <font color="teal">" "</font> & prop.length <font color="blue">End</font> <font color="blue">Select</font> <font color="blue">If</font> Right(sItem, <font color="darkblue"><b>1</b></font>) = Chr(<font color="darkblue"><b>0</b></font>) <font color="blue">Then</font> <font color="#00AA00">'убрать нулевой символ на конце</font> sItem = Left(sItem, Len(sItem) - <font color="darkblue"><b>1</b></font>) <font color="blue">End</font> <font color="blue">If</font> strFull = strFull & sItem & vbCrLf <font color="blue">Next</font> i <font color="blue">Else</font> strFull = <font color="teal">"Not a graphic file!"</font> <font color="blue">End</font> <font color="blue">If</font> showEXIFTags = strFull retStatus = Execute(GdipDisposeImage(m_img)) <font color="blue">If</font> GdipInitialized = True <font color="blue">Then</font> retStatus = Execute(ShutdownGDIPlus) <font color="blue">End</font> <font color="blue">If</font> <font color="blue">End</font> <font color="blue">Function</font>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д