Извлекает сведения об изображении
Синтаксис
Использование
result = ImageInfo( image [, [width] [, [height] [, [bypp] [, [pitch] [, [pixdata] [, size]]]]]] )
Параметры
image
Адрес изображения.
width
Хранит ширину изображения в пикселях.
height
Хранит высоту изображения в пикселях.
bypp
Хранит байт на пиксель изображения - т.е. размер одного
пикселя, в байтах.
pitch
Хранит питч изображения, т.е. размер каждой сканирующей
линии (строки), в байтах. Обратите внимание, что это может быть
больше, чем просто width * bypp, потому
что растровые строки могут быть дополнены для лучшего
выравнивания в памяти.
pixdata
Хранит адрес начала первой строки развертки изображения.
size
Хранит размер изображения в памяти, в байтах.
Возвращаемое значение
Если image указывает на недействительное изображение,
возвращается единица (1). В противном случае, width, height, bypp, pitch, pixdata
и size имеют соответствующие значения, и возвращается нуль
(0).
Описание
ImageInfo предоставляет различную информацию об изображении,
например, его размеры и глубину цвета, но также предоставляет вам информацию
для непосредственного доступа ко всем данным пикселей в пиксельном буфере.
Она также может дать информацию о размере изображения в памяти, которые
полезны для выделения памяти при копировании существующего образа, или для
записи изображения в файл.
Пример
'' pixelptr(): использование imageinfo() для
поиска указателя на пиксели в изображении
'' возвращает нуль в случае ошибки или указатель для х, у
из границ
Function pixelptr(ByVal img As Any Ptr, ByVal x As Integer, ByVal y As Integer) As Any Ptr
Dim As Integer w, h, bypp, pitch
Dim As Any Ptr pixdata
Dim As Integer success
success = (ImageInfo(img, w, h, bypp, pitch, pixdata) = 0)
If success Then
If x < 0 Or x >= w Then Return 0
If y < 0 Or y >= h Then Return 0
Return pixdata + y * pitch + x * bypp
Else
Return 0
End If
End Function
'' Пример использования:
'' Графический экран 320*200, 8 бит на пиксель
ScreenRes 320, 200, 8
Dim As Any Ptr ip '' указатель
изображения
Dim As Byte Ptr pp '' указатель
на пиксели (используется байт для
8 бит на пиксель)
ip = ImageCreate(32, 32) '' создание
изображения (32*32, 8 бит на пиксель)
If ip <> 0 Then
'' Рисуем узор на изображении
For y As Integer = 0 To 31
For x As Integer = y - 5 To y + 5 Step 5
'' найти
указатель на пиксели для х, у позиции
'' обратите
внимание: это неэффективно делать для каждого пикселя!
pp = pixelptr(ip, x, y)
'' если
успешно, выставить значение в пикселе
If (pp <> 0) Then *pp = 15
Next x
Next y
'' поместить изображение и
нарисовать рамку вокруг него
Put (10, 10), ip, PSet
Line (9, 9)-Step(33, 33), 4, b
'' удалить изображение, чтобы
освободить память
ImageDestroy ip
Else
Print "Error creating image!"
End If
Sleep
'' Создание 32-битного графического экрана и изображения.
ScreenRes 320, 200, 32
Dim image As Any Ptr = ImageCreate( 64, 64 )
Dim pitch As Integer
Dim pixels As Any Ptr
'' Получить полную информацию
для перебора данных пикселя.
If 0 <> ImageInfo( image, ,,, pitch, pixels ) Then
Print "unable to retrieve image information."
Sleep
End
End If
'' Нарисуем рисунок на изображении, непосредственно
манипулирования пикселями в памяти.
For y As Integer = 0 To 63
Dim row As UInteger Ptr = pixels + y * pitch
For x As Integer = 0 To 63
row[x] = RGB(x * 4, y * 4, (x Xor y) * 4)
Next x
Next y
'' Рисуем изображение на экран.
Put (10, 10), image
ImageDestroy( image )
Sleep
Различия диалектов
- Не доступно в диалекте -lang qb
, но есть псевдоним __Imageinfo.
Отличия от QB
См. также