画像データの列を、別の色の濃さに変換します。
構文:
用法:
ImageConvertRow
( src, src_bpp, dst, dst_bpp, width [, isrgb ] )
パラメタ:
src
ソース列の始まりのアドレス。
ソースは、1画素あたり 24ビットか 32ビットの深さがあるフルカラー画像か、または、1画素あたり 1-8ビットの深さがある パレット化画像の、どちらかです。
パレット化画像を変換するのは、変換するときに、画像に適合するパレットを使用している画面モードの場合にだけ、適切に働きます。
src_bpp
ソース列の、画素あたりのビット数。1-8、24、および32。
dst
あて先列の、始まりのアドレス。
画像は、1画素あたり16ビットか32ビットのフル・カラー画像です。
ソースがパレット化画像なら、あて先もまた、1画素あたり1〜8ビットのパレット化画像の必要があります。
dst_bpp
あて先の列の、画素あたりのビット。有効値は、1-8、16、32 です。
width
画素の列の長さ。
isrgb
ゼロの値は、赤と青のチャンネルが、ソース画像で、相互に、もう一つの方法あることを示します。
変換で、赤と青のチャンネルを交換したいなら、このスイッチを使用してください。
説明:
あて先画像に合わせるために、各画素で色情報を変換して、1つの記憶域から別の記憶域まで、画像の列をコピーします。
例:
注:FreeBASIC 1.08〜 で、SetEnviron を追加しなくても、日本語環境で描画画面が表示されるように改善されました。
#include
"fbgfx.bi"
#if
__FB_LANG__ =
"fb"
Using FB
#endif
' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")
Const As Long 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ビット・モードで描画画面を開けます。そして、画像をそこに PUT します
ScreenRes 320,
200,
8
WindowTitle "8-bit color mode"
Put (10,
10), img8
Sleep
'' 32ビットの画像に、画像データをコピーします
Dim As Byte Ptr p8, p32
Dim As Long pitch8, pitch32
#ifndef ImageInfo
'' FB の旧式のバージョンには、ImageInfo の機能がありません
#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ビット・モードの描画画面を開けます。そして、画像をそこに PUT します
ScreenRes 320,
200,
32
WindowTitle "32-bit color mode"
Put (10,
10), img32
Sleep
'' メモリから画像を解放します
ImageDestroy img8
ImageDestroy img32
|
|
方言差:
- 別名 __ImageConvertRow で参照をつけないかぎり、 -lang qb 方言では使えません。
QBからの違い:
参照: