本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[MSC]DOS/V 用 グラフィックライブラリ関数_remappaletteの不具合

文書番号: 401923

最終更新日: 2004/04/27


この資料は以下の製品について記述したものです。


概要

この資料は、DOS/V 用の _remappalette 関数による不正な描画について説明したもの です。

詳細

_remappalette 関数で正常にカラーパレットの変更が行えない場合があります。
ここでは、代用としてカラーパレットを変更するサンプルプログラムを示します。

サンプルをご覧になる前に

このサンプルプログラムは、_remappalette 関数の不具合を回避する関数の一例として 提示するもので、十分にテストされた信頼されるものではありません。個人の学習の ための使用、修正、分割については、自由に行っていただけますが、このサンプルに 関しての、サポート、説明等は一切お受けしかねますのであらかじめご了承くださ
い。また、このプログラムを実行し発生した、いかなる障害も、弊社では責任を
負いません。
  /*
  * ファンクションコール INT10H を使用したサンプルプログラム
  * この関数の機能は_remappalette 関数とほぼ同様で、使い方も同じですが、ビデオ
  * モードなどをチェックしていないため、エラーの戻り値は返しません。また、他の
  * グラフィックス関数および標準関数などに対する影響を考慮していないため、なんら
  * かの異常が発生する可能性があります。従って、ご利用頂く際には十分なテストが
  * 必要となります。
  */
  #include <dos.h>
  long __far _remappalette_new ( short index, long color )
  {
    union _REGS inregs, outregs;
    int ramdacreg;
    long retcol;
    inregs.x.ax = 0x1007;  /*パレットレジスタ読出し RAMDAC レジスタ番号の取得*/
    inregs.h.bl = index;                   /* パレットレジスタの番号 */
    _int86(0x10,&inregs,&outregs);
    ramdacreg=outregs.h.bh;
    inregs.x.ax = 0x1015;                  /* RAMDAC レジスタの読みだし */
    inregs.h.bl = ramdacreg;               /* RAMDAC レジスタ番号 */
    _int86(0x10,&inregs,&outregs);
    retcol=(long)outregs.h.cl<<16|(long)outregs.h.ch<<8|(long)outregs.h.dh;
    inregs.x.ax = 0x1010;                  /* RAMDAC レジスタの設定 */
    inregs.x.bx = ramdacreg;               /* RAMDAC レジスタ番号 */
    inregs.h.dh =  color & 0xffL;          /* 赤の設定 */
    inregs.h.ch = (color & 0xff00L  )>>8;  /* 緑の設定 */
    inregs.h.cl = (color & 0xff0000L)>>16; /* 青の設定 */
    _int86(0x10,&inregs,&outregs);
    return(retcol);
  }

原因

_remappalette 関数の障害です。

対処方法

上記サンプルを利用することでほとんどの場合、回避できると思われます。

詳細

  • Visual C++ は、米国 Microsoft Corporation の商標です。

Keywords: KBBUG KB401923
Technology: kbAudDeveloper kbvc150 kbVCsearch kbZNotKeyword3 kbZNotKeyword8

inserted by FC2 system