powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / как считать разрешение картинки
18 сообщений из 18, страница 1 из 1
как считать разрешение картинки
    #37140405
Лампочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем доброго времени суток! я считываю картинку в blob. Как из этого blob-а получить разрешение картинки?(по горизонтали и по вертикали)
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37140444
Лампочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на самом деле я знаю алгоритм считывания, но я не могу перевести его с делфи на билдер...
в делфи используется filestream(если не ошибаюсь), функции SWAP и ORD, применяемые к считанным из filestream данным типа word. В общем, я в таком расстройстве, что даже не могу толком объяснить..может быть, кто-то знает, как на билдере считывать разрешение?
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37140467
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лампочка,

Однажды мне пришлось делать тоже самое, но я тогда обошелся грубым методом тыка: на окне создавал объект picture с настиройками, чтобы объект под картинку растягивался, запихивал картинку в него, считывал размеры в PBUnit'ах и пересмчитывал их в пиксели. Оно, конечно, криво и в корне не правильно, но работает :)
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37140469
Лампочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо,Икар! мне программер, который задачу ставит, не простит этого. А вот и код на Делфи. Но убейте меня - я не могу перевести его на билдер...
procedure GetResJpg(JPGFile: string);
const
BufferSize = 50;
var
Buffer: string;
Index: integer;
FileStream: TFileStream;
HorzRes, VertRes: Word;
DP: Byte;
Measure: string;
begin
FileStream := TFileStream.Create(JPGFile,
fmOpenReadWrite);
try
SetLength(Buffer, BufferSize);
FileStream.Read(buffer[1], BufferSize);
Index := Pos('JFIF' + #0$00,buffer);
if Index > 0 then
begin
FileStream.Seek(Index + 6, soFromBeginning);
FileStream.Read(DP, 1);
case DP of
1: Measure := 'DPI'; //Dots Per Inch
2: Measure := 'DPC'; //Dots Per Cm.
end;
FileStream.Read(HorzRes, 2); // x axis
HorzRes := Swap(HorzRes);
FileStream.Read(VertRes, 2); // y axis
VertRes := Swap(VertRes);
end
finally
FileStream.Free;
end;
end;
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37140613
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте BlobMid() чтобы извлекать нужные участки файла (взамен Seek и Read).
полученные блобы преобразовывайте с помощью byte(), int(), в нужные типы данных.

Delphi <=> PB
byte = byte (PB10+) or char (PB9-)
word = int


Чем заменить Pos по блобу не помню.
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37140618
Лампочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, спасибо! надеюсь, хоть что-то смогу сделать)
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37141041
umalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
База данных какая?
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37141309
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лампочка ,
запустите скрипт, он выведет все данные о JPG файле
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
/*test.vbs*/
Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.NameSpace("...Здесь путь к каталогу с файлом test.jpg...")
Set objItem = objFolder.ParseName("test.jpg")
strResult = vbNullString
strResult = strResult & "Информация об файле """ & objItem.Path & """:" & vbCrLf
For i=- 1  To  40 
    strResult = strResult & i & " - " & objFolder.GetDetailsOf(objItem, i) & vbCrLf
Next
MsgBox strResult, vbInformation

Перевести в РВ думаю не сложно.

А для BMP (по Вашему методу) делал типа так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
/*РВ10.5*/
Int job
BLOB lb_data
ULONG lul_w, lul_h
string ls_file

job = FileOpen ( ls_file, StreamMode!, Read!)
FileReadEx (job, lb_data)

lul_w = Long(Integer(BlobMid(lb_data, 19 , 2 )),Integer(BlobMid(lb_data, 21 , 2 )))
lul_h = Long(Integer(BlobMid(lb_data, 23 , 2 )),Integer(BlobMid(lb_data, 25 , 2 )))
FileClose (job)

Messagebox("BMP", "Width: "+string( lul_w)+"~nHeight: "+string( lul_h))
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37141393
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот нашел интересную DLL - PortableDeviceWiaCompat.dll
По идее с ней можно не только размеры, и другие характеристики вытащить, но и корректно изменять эти файлы.
Но вот прикрутить к РВ не получилось. :(
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37142778
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот накропал примерный код, эквивалентный приведенному выше дельфийскому (но не проверял)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
public function integer of_get_image_size (readonly blob abb_image_data, 
                  ref unsignedinteger ai_width, ref unsignedinteger ai_height, 
                  ref string as_measure);
Long ll_i, ll_start =  0 
Byte lc_dp

// Find JFIF header start
For ll_i =  1  To Len(abb_image_data)
   If String(BlobMid(abb_image_data, ll_i,  4 )) = "JFIF" Then
      ll_start = ll_i
      Exit
   End If
Next
If ll_start =  0  Then Return - 1 

// Read measures
lc_dp = byte(BlobMid(abb_image_data, ll_start +  6 ,  1 ))
Choose Case lc_dp
   Case  1 
      as_measure = "DPI"
   Case  2 
      as_measure = "DPC"
   Case Else
      Return - 1 
End Choose

// Read resolution
ai_width = Integer(BlobMid(abb_image_data, ll_start +  7 ,  2 ))
ai_height = Integer(BlobMid(abb_image_data, ll_start +  9 ,  2 ))
// Reverse byte order
ai_width = Integer(ai_width *  256 ) + Integer(ai_width /  256 )
ai_height = Integer(ai_height *  256 ) + Integer(ai_height /  256 )

Return  1 
end function
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37142959
Лампочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот у меня в билдере 10 почему-то нет байта..поэтому я никак не могу считать measure. А разрешения все-таки сама сгодня накропала, поскольку инета на работе нет - и только что нашла все сообщения. Что можно сделать вместо byte? И всем спасибо!
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37143012
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лампочкавот у меня в билдере 10 почему-то нет байта..поэтому я никак не могу считать measure. А разрешения все-таки сама сгодня накропала, поскольку инета на работе нет - и только что нашла все сообщения. Что можно сделать вместо byte? И всем спасибо!
PB10.5 Help. Standard datatypes. Byte
Код: plaintext
1.
2.
3.
4.
5.
 8 -bit unsigned integers, from  0  to + 255 .
Using literals  To assign a literal value, use any whole positive number in the range  0  to  255 .
The leading plus sign is not required ( 18  and + 18  are the same).
For example: 
 1   123   200  + 55  + 200 
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37143342
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лампочкавот у меня в билдере 10 почему-то нет байта..поэтому я никак не могу считать measure. А разрешения все-таки сама сгодня накропала, поскольку инета на работе нет - и только что нашла все сообщения. Что можно сделать вместо byte? И всем спасибо!

Считывание байта из блоба в переменную типа long
Код: plaintext
1.
2.
3.
4.
5.
blob{ 4 } lbb_tmp
long ll_dc
BlobEdit(lbb_tmp,  1 , Long( 0 ))
BlobEdit(lbb_tmp,  1 , BlobMid(abb_image_data, ll_start +  6 ,  1 ) )
ll_dc = Long(lbb_tmp)
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37143345
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISЛампочкавот у меня в билдере 10 почему-то нет байта..поэтому я никак не могу считать measure. А разрешения все-таки сама сгодня накропала, поскольку инета на работе нет - и только что нашла все сообщения. Что можно сделать вместо byte? И всем спасибо!
PB10.5 Help. Standard datatypes. Byte
Код: plaintext
1.
2.
3.
4.
5.
 8 -bit unsigned integers, from  0  to + 255 .
Using literals  To assign a literal value, use any whole positive number in the range  0  to  255 .
The leading plus sign is not required ( 18  and + 18  are the same).
For example: 
 1   123   200  + 55  + 200 

Тип byte появился начиная с 10.5
В 10, 10.2 его нет (не знаю о чем они думали).
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37143792
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyне знаю о чем они думали
Возможно это будет название темы для нового топика.
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37144527
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
02.03.2011 9:29, Anatoly Moskovsky пишет:

> В 10, 10.2 его нет (не знаю о чем они думали).

О том же, о чём они думали, когда решили не добавлять в язык побитовые
логические операции...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37145053
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyне знаю о чем они думали
Это было риторическое замечание.
Вряд ли имеет смысл перечислять все, над чем "они думали" - слишком длинный список.
:)
...
Рейтинг: 0 / 0
как считать разрешение картинки
    #37145355
Лампочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, спасибо! и всем вообще спасибо! в который раз так помогаете:)
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / как считать разрешение картинки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]