[WR3.0]実行時のImage印刷について

HOME › フォーラム › 旧サポート掲示板 › [WR3.0]実行時のImage印刷について

  • このトピックは空です。
6件の投稿を表示中 - 1 - 6件目 (全6件中)
  • 投稿者
    投稿
  • #808
    (有)クレスト長岡
    ゲスト

    たびたびの質問でご迷惑をおかけします。
    Delphi5で開発してます。
    OCXのDIBDataの使い方を教えて下さい。
    [W2.0]では以下のように使ってました。

    GetDIBSizes(pBmp.Handle, InfoSize, ImageSize);
    中略
    GetDIB(pBmp.Handle, pBmp.Palette, pBMInfo^, (Pchar(pBMInfo) + infoSize)^);
    wrSetDIB(hReport, @pObjectProp, pBMInfo);

    どうかよろしくご指導下さい。

    #809
    中嶋@ソフトウィング
    ゲスト

    回答がおそくなってしまいすみませんでした。
    明確な回答というわけではないのですが。
    DibDataへはDib情報をOleVariantとして渡すような使用となっております。そこで

    vaDibInfo:variant;

    として定義していただだき

    >GetDIBSizes(pBmp.Handle, InfoSize, ImageSize);
    >中略
    >GetDIB(pBmp.Handle, pBmp.Palette, pBMInfo^, (Pchar>>(pBMInfo) + infoSize)^);
    >wrSetDIB(hReport, @pObjectProp, pBMInfo);

    ここで確保されたpBMInfoを

    vaDibInfo:=pBMInfo;

    とされて
    waxReport.Layer[2].WRObject’wriDenpyo’).DibData:=vaDibInfo;

    のような形で実現できるかと思います。
    また、可能であればなるべくImageSourceにて格納することをお勧めいたします。

    #810
    (有)クレスト長岡
    ゲスト

    ご回答ありがとうございました。
    このアプリでは
    1)ユーザーが画像サイズを変更します。
    2)画面の画像がディスクに存在する保証はありません。
    従いまして、できればDIBDataを利用したかったのですが...
    vaDibInfo:=pBMInfo;
    がうまくいきませんでした。

    当面は以下のコードで処理します。
    1)画面の画像を特定ホルダに保存。
    2)特定ホルダからImageSourceで読み込む。
    3)特定ホルダの画像を削除。

    時間ができたなら、ご回答を参考にしてDIBDataを何とかしたいと思います。
    どうもありがとうございました。

    #811
    中嶋@ソフトウィング
    ゲスト

    お世話になっております。

    御差支えなければ、WingReportV2.0でのDIBデータ取得から
    セット部分までの実現可能な例を私まで添付して頂けますでしょうか? そのソースを元にご回答差し上げたいとおもいます。

    以上、宜しくお願いたします。

    #812
    中嶋@ソフトウィング
    ゲスト

    お世話になっております。
    Delphi でのDIBDataを使ったサンプルを紹介させて頂きます。
    Imageコンポーネントと適当な画像(BMP)を表示の上
    サンプル1のソースファイルのPrintReport部分に組み込んでお試しください。

    サンプル開始
    ——————————–

    Var

     Bitmap1: TBitmap;
     Info, Image:array of byte;
     bDibAll:array of byte;

     InfoSize,ImageSize: DWord;

     vSetDib:variant;
     
    begin

    Bitmap1 := TBitmap.Create;
        
      //サンプルとして、Imageコンポーネントの画像を使用します。
    Bitmap1.Assign (Form1.Image1.Picture.Bitmap);

    //DIBサイズを取得する
    GetDIBSizes(Bitmap1.Handle,InfoSize, ImageSize);

    SetLength(Info, InfoSize); //ビットマップインフォサイズ確保
    SetLength(Image, ImageSize); //イメージサイズ確保

    //DIBデータを取得する
    GetDIB(Bitmap1.Handle,Bitmap1.Palette,PBitmapInfo(Info)^, Pointer(Image)^);

    //DIBサイズをInfo+Bitsをふくめたサイズ確保
    setlength(bDibAll, InfoSize + ImageSize);

    //DIBをまるごとコピーする
    move(PBitmapInfo(Info)^, bDibAll[0],InfoSize);
    move(Pointer(Image)^, bDibAll[InfoSize],ImageSize);

    //取得したDIBデータをVariant型にする
    vSetDib := bDibAll;
    //イメージデータをセットする
    waxReport.Layer[2].WRObject(‘wriDenpyo’).dibdata :=vSetDib;

    ——————————–
    サンプルここまで

    #813
    (有)クレスト長岡
    ゲスト

    サンプルありがとうございました。
    結果報告が遅くなり申し訳有りません。
    サンプル内容でとりあえずは成功です。

    問題1
    画像によっては印刷不良となります。
    「EOleExceptionクラスの例外を生成しました」
    LastErrorでのエラーコード:22424。
    デジカメ等の画像は正常ですが図形関連のビットマップが怪しいようです。

    問題2
    速度が極端に遅くなります。
    600×480の画像9枚を貼り付けたレポートをプレビューしてみました。
    以下がプレビュー表示までのタイムです。
    ImageSource:4秒
    Dibdata:26秒
    これはDibdataそのものでなく
    vSetDib := bDibAll;
    での速度低下です。
    今後もあれこれやってみたいと思いますが
    とりあえずの中間報告とさせていただきます。

6件の投稿を表示中 - 1 - 6件目 (全6件中)
  • フォーラム「旧サポート掲示板」には新規投稿および返信を追加できません。