- このトピックは空です。
-
投稿者投稿
-
2021年6月29日 5:34 PM #808
(有)クレスト長岡
ゲストたびたびの質問でご迷惑をおかけします。
Delphi5で開発してます。
OCXのDIBDataの使い方を教えて下さい。
[W2.0]では以下のように使ってました。GetDIBSizes(pBmp.Handle, InfoSize, ImageSize);
中略
GetDIB(pBmp.Handle, pBmp.Palette, pBMInfo^, (Pchar(pBMInfo) + infoSize)^);
wrSetDIB(hReport, @pObjectProp, pBMInfo);どうかよろしくご指導下さい。
2021年6月29日 5:35 PM #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にて格納することをお勧めいたします。2021年6月29日 5:35 PM #810(有)クレスト長岡
ゲストご回答ありがとうございました。
このアプリでは
1)ユーザーが画像サイズを変更します。
2)画面の画像がディスクに存在する保証はありません。
従いまして、できればDIBDataを利用したかったのですが...
vaDibInfo:=pBMInfo;
がうまくいきませんでした。当面は以下のコードで処理します。
1)画面の画像を特定ホルダに保存。
2)特定ホルダからImageSourceで読み込む。
3)特定ホルダの画像を削除。時間ができたなら、ご回答を参考にしてDIBDataを何とかしたいと思います。
どうもありがとうございました。2021年6月29日 5:35 PM #811中嶋@ソフトウィング
ゲストお世話になっております。
御差支えなければ、WingReportV2.0でのDIBデータ取得から
セット部分までの実現可能な例を私まで添付して頂けますでしょうか? そのソースを元にご回答差し上げたいとおもいます。以上、宜しくお願いたします。
2021年6月29日 5:35 PM #812中嶋@ソフトウィング
ゲストお世話になっております。
Delphi でのDIBDataを使ったサンプルを紹介させて頂きます。
Imageコンポーネントと適当な画像(BMP)を表示の上
サンプル1のソースファイルのPrintReport部分に組み込んでお試しください。サンプル開始
——————————–Var
Bitmap1: TBitmap;
Info, Image:array of byte;
bDibAll:array of byte;InfoSize,ImageSize: DWord;
vSetDib:variant;
beginBitmap1 := 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;——————————–
サンプルここまで2021年6月29日 5:36 PM #813(有)クレスト長岡
ゲストサンプルありがとうございました。
結果報告が遅くなり申し訳有りません。
サンプル内容でとりあえずは成功です。問題1
画像によっては印刷不良となります。
「EOleExceptionクラスの例外を生成しました」
LastErrorでのエラーコード:22424。
デジカメ等の画像は正常ですが図形関連のビットマップが怪しいようです。問題2
速度が極端に遅くなります。
600×480の画像9枚を貼り付けたレポートをプレビューしてみました。
以下がプレビュー表示までのタイムです。
ImageSource:4秒
Dibdata:26秒
これはDibdataそのものでなく
vSetDib := bDibAll;
での速度低下です。
今後もあれこれやってみたいと思いますが
とりあえずの中間報告とさせていただきます。 -
投稿者投稿
- フォーラム「旧サポート掲示板」には新規投稿および返信を追加できません。