FreeBASIC マニュアルのトップに戻る

FreeBASIC ImageConvertRow

目次→描画ライブラリ参考→2次元 描画関数IMAGECONVERTROW←オリジナル・サイト

ImageConvertRow 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

画像データの列を、別の色の濃さに変換します。

構文:
declare sub ImageConvertRow ( byval src as any ptr, byval src_bpp as long, byval dst as any ptr, byval dst_bpp as long, byval width as long, byval isrgb as long = 1 )

用法:
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


8ビット画像
32ビット画像
方言差:

QBからの違い:

参照:

2次元描画関数に戻る
 
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2022-03-25 13:35:05
日本語翻訳:WATANABE Makoto、原文著作者:CountingPine

ホームページのトップに戻る

表示-非営利-継承