ImageInfo
 
Извлекает сведения об изображении

Синтаксис

Declare Function ImageInfo ( ByVal image As Any Ptr, ByRef width As Integer = 0, ByRef height As Integer = 0, ByRef bypp As Integer = 0, ByRef pitch As Integer = 0, ByRef pixdata As Any Ptr = 0, ByRef size As Integer = 0 ) As Integer

Использование

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

  • Новое в FreeBASIC

См. также