ImageConvertRow
 
Преобразует строку данных изображения в другую глубину цвета

Синтаксис

Declare Sub ImageConvertRow ( ByVal src As Any Ptr, ByVal src_bpp As Integer, ByVal dst As Any Ptr, ByVal dst_bpp As Integer, ByVal width As Integer, ByVal isrgb As Integer = 1 )

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

ImageConvertRow( src, src_bpp, dst, dst_bpp, width [, isrgb ] )

Параметры

src
Адрес начала строки буфера источника. Источник может быть полноцветным изображением с глубиной 24 или 32 бита на пиксель, или изображением с палитрой с глубиной 1-8 битов на пиксель. Преобразование изображения с палитрой будет работать правильно, только если вы находитесь в режиме экрана, который использует правильную палитру для изображения при выполнении преобразования.
src_bpp
Количество бит на пиксель в строке буфера источника. Допустимые значения для этого 1-8, 24 и 32.
dst
Адрес начала строки буфера назначения. Изображение может быть полноцветным изображением с глубиной 16 или 32 бита на пиксель. Если буфером источником является изображение с палитрой, буфер назначения также может быть изображением с палитрой от 1 до 8 бит на пиксель.
dst_bpp
Количество бит на пиксель в строке буфера назначения. Допустимые значения для этого 1-8, 16 и 32.
width
Длина строки в пикселях.
isrgb
Нулевое значение указывает, что красные и синие каналы лежат наоборот в исходном изображении. Используйте эту опцию, если вы хотите, чтобы красные и синие каналы были заменены в процессе преобразования.

Описание

Копирует строку изображения из одной памяти в другую, преобразовывая информацию о цвете в каждом пикселе, чтобы соответствовать конечному изображению.

Пример

#include "fbgfx.bi"
#if __FB_LANG__ = "fb"
Using FB
#endif

Const As Integer w = 64, h = 64
Dim As IMAGE Ptr img8, img32
Dim As Integer x, y


'' создание 32-битного изображения, размером w*h:
ScreenRes 1, 1, 32, , GFX_NULL
img32 = ImageCreate(w, h)

If img32 = 0 Then Print "Imagecreate failed on img32!": Sleep: End


'' создание 8-битного изображения, размером w*h:
ScreenRes 1, 1, 8, , GFX_NULL
img8 = ImageCreate(w, h)

If img8 = 0 Then Print "Imagecreate failed on img8!": Sleep: End


'' заполнить 8-битное изображение узором
For y = 0 To h - 1
    For x = 0 To w - 1
        PSet img8, (x, y), 56 + (x + y) Mod 24
    Next x
Next y


'' открыть графическое окно в 8-битном режиме, и поместить изображение в него:
ScreenRes 320, 200, 8
WindowTitle "8-bit color mode"
Put (10, 10), img8

Sleep


'' скопировать данные изображения в 32-битное изображение
Dim As Byte Ptr p8, p32
Dim As Integer pitch8, pitch32

#ifndef ImageInfo '' older versions of FB don't have the ImageInfo feature
#define GETPITCH(img_) IIf(img_->Type=PUT_HEADER_NEW,img_->pitch,img_->old.width*img_->old.bpp)
#define GETP(img_) CPtr(Byte Ptr,img_)+IIf(img_->Type=PUT_HEADER_NEW,SizeOf(PUT_HEADER),SizeOf(_OLD_HEADER))
pitch8 = GETPITCH(img8): p8 = GETP(img8)
pitch32 = GETPITCH(img32): p32 = GETP(img32)
#else
ImageInfo( img8,  , , , pitch8,  p8  )
ImageInfo( img32, , , , pitch32, p32 )
#endif

For y = 0 To h - 1
    ImageConvertRow(@p8 [ y * pitch8 ],  8, _
                    @p32[ y * pitch32], 32, _
                    w)
Next y


'' открыть графическое окно в 32-битном режиме и поместить изображение в него:
ScreenRes 320, 200, 32
WindowTitle "32-bit color mode"
Put (10, 10), img32

Sleep


'' освободить изображения в памяти:
ImageDestroy img8
ImageDestroy img32


Различия диалектов

  • Не доступно в диалекте -lang qb , но есть псевдоним __ImageConvertRow.

Отличия от QB

  • Новое в FreeBASIC

См. также