MFC vc++ imagekit6 – プログラミング – Home

通知
すべてクリア

[解決済] MFC vc++ imagekit6


deborn
 deborn
(@deborn)
ゲスト
結合: 16年前
投稿: 3
Topic starter  

今、vc++のMFCで画像読込のプログラムを作成しています。

ダイアログに「ディスプレイコントロール」「ファイルコントロール」「コモンコント
ロール」があるのですが、

画像をディスプレイコントロールに表示したいです。

ご回答の程よろしくお願いいたします


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

質問になっていません。


返信引用
deborn
 deborn
(@deborn)
ゲスト
結合: 16年前
投稿: 3
Topic starter  

重要な部分が抜けていました、申し訳ございません。

(ファイルコントロールメンバ変数).GetImgHandle処理後、

読み込みたい画像をDIBからimagedataに変更し、それをディスプレイコントロールに描
画したいのです。

その処理を考えているのですが、
例外が発生してしまうので、なにか良い方法はないでしょうか?

よろしくお願いいたします。

ちなみに自分のソースは

void CFileDlg::ClickIkdisp()
{
int judge, ikLoad = 0, ikClear = 0, ikScale = 1, ikStretch = 2,    
     ikActualSize = 3;
HDIB img, hDIB, *pDIB;
VsiImageData *p;
pDIB = &img;

judge = m_open.LoadFile(ikLoad);

if(judge != 0){
img = (HDIB)m_open.GetImgHandle();
}

//VsiImageData* WINAPI VsiDibToImageData( HDIB pDIB );
     //↑ヘッダで宣言

//pDIB = DIBヘッダへのポインタ
//成功:イメージデータ構造体のポインタ、失敗:NULL
//DIBからimagedataに変更する

p = VsiDibToImageData(pDIB);

if(p == NULL){
return;
}

//m_open.GetFileName();
m_hy.Display(ikActualSize);

return;
}

となっています。
おかしな部分など些細なことでも構いませんので、ご指摘いただけたらと思います。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

「VC++とMFCで」と書かれていますが、

VC++のバージョンについて全く触れられていないので
MFCのバージョンもわかりません。

あと、「ディスプレイコントロール」「ファイルコントロール」と言った単語が
出てきていますが、これらは一体何なんでしょう?
MFCにこういうコントロールは無いと思うのですけれど。

Microsoft以外のメーカーのライブラリを使っているのであれば、
そちらのメーカーに聞くのが筋かと思いますよ。
少なくとも私は書かれている内容からではさっぱりわかりません。
自作のクラスであれば、そのクラスの中身を説明してもらわないと
掲示板を見ている人間には内容を知りようも有りません。

追加で提示された内容では、最初の書き込みで感じた疑問が
一つも解消されていないです。
もっと、問題を整理してから書き込みをお願いします。

あと、Microsoftが提供しているクラス以外の部分は
きちんとした説明が必要ですよ。
貴方が使っているライブラリを把握しているのは貴方だけですから。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

たぶんimagekit6上のコントロールでしょう。
imagekit6のマニュアルを読んでもらうしか
無いかも(vv;)。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

> たぶんimagekit6上のコントロールでしょう。
> imagekit6のマニュアルを読んでもらうしか
> 無いかも(vv;)。

はうあっ。
タイトルに書いてあったのね。
て言うか、マニュアル読んでわからなければ、メーカーに聞いてください。
正規ユーザーならテクニカルサポートしてくれると思うので。

思うにこういうライブラリに関しては必ず使うって類の物じゃないから
掲示板で聞くのは無理があるかもなぁ。
使った事がある人が偶々掲示板を見ないとレスつかないだろうし。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

メーカーにサポート掲示板があるならそっちで聞くのが吉かと。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

質問者の代わりに製品サイト紹介
> http://www.newtone.co.jp/productik600.html

サポート掲示板見当たらないですね。
サポートは殆ど有償ですね。

こうゆうことは、ぜひ質問者が回答すべきこだと思います。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

「ぜひ」は余計でしたね。
サポート掲示板、存知の方お願いします。


返信引用
らら
 らら
(@らら)
ゲスト
結合: 22年前
投稿: 93
 

ImageKit6のDLLはときどき使っているので、コントロールの方はよく知りませんが、簡
単にテストしてみました。
下のソースで例外もなく画像が表示されました。
強いていうなら、debornさんのソースには★印の部分がないかと思われます。
これで、タイトルにあるMFC vc++ ImageKit6 という点では解決できるのではないかと
思いますが、
debornさんのいう「DIBからimagedataに変更」という処理関数 VsiDibToImageData
(pDIB) というのはなんでしょうか?ImageKitにもMFCにもないような気がします。そち
らで例外がでているのかどうかはお確かめください。

void CIkTestDlg::OnClickIkdisp1()
{
BOOL judge;
long img; //イメージハンドル

m_open.SetFileName(C:\\testImage.jpg);
//↑追加しましたが、ファイル名は他で設定されているんですよね?

judge = m_open.LoadFile(0);
    // ↑イメージファイルを読み込みます。
//(引数0はファイルタイプ自動認識)

if ( judge )
{
img = m_open.GetImgHandle();
//↑イメージハンドルの読込

m_hy.SetImgHandle(img);//★←この部分がないのでは??
//↑表示コントロールへのイメージハンドルの設定

m_hy.Display(2);
//↑イメージ表示
// 引数:表示モード(0:クリア、1:スケール表示、2:ストレッチ表
示、3:実寸表示)
}
}


返信引用
らら
 らら
(@らら)
ゲスト
結合: 22年前
投稿: 93
 

追加です。GetImgHandle()をしたメモリハンドルは解放しないといけないので、
  m_hy.Display(2);
の下に解放する関数が必要です。

  m_ikcomon.SetImgHandle(img);
  m_ikcomon.FreeMemory();

このままこのスレ本人に放置される気もしますが、念のため一応・・・。


返信引用
deborn
 deborn
(@deborn)
ゲスト
結合: 16年前
投稿: 3
Topic starter  

レスが遅れ申し訳ございません。

たくさんのレスを頂き、学んだこともありました。

ららさんのものを真似てみたところ、無事動きました。

自分のソースからコピペした際にVsiDibToImageData(pDIB)を省くのを忘れていました。

これはこちらでの特別なものなので、お気になさらず…
まず先にもっとcの勉強が必要だなと改めて実感しました。

他の方々も本当にありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました