[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/12/27(Wed) 14:24
投稿者名:し〜さ〜
Eメール:
URL :
タイトル:
VB6.0でのBMPデータ保存の方法
初めまして、VB超初心者です。

今回、XMLデータ内の氏名等の文字をBMPに保存するという作業を行うことになりました。
FORMがあって動的にXMLデータが取得できるのではなく、
メモリ上での静的な方法を行わなければなりません。

インターネット上で調査しましたが、上手く検索することができません。
もしご存知の方がいらっしゃいましたら、ご教授ください。

【環境】
 OS:Windows2000
 コンパイル環境:VB6.0

投稿時間:2006/12/27(Wed) 16:17
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: VB6.0でのBMPデータ保存の方法
> 今回、XMLデータ内の氏名等の文字をBMPに保存するという作業を行うことになりました。
えぇと、BMP というのは、Bitmap 画像のことですよね?

# XML で BMP というと、私は Unicode 0面の
# Basic Multilingual Plane (基本多言語面) を連想してしまうので…。


> FORMがあって動的にXMLデータが取得できるのではなく、
> メモリ上での静的な方法を行わなければなりません。
もともと、Form と XML データの間に関連性はありませんよね。

で、『メモリ上での静的な方法』というのが、何を示しているのかわかりませんが、
VB6 から XML データの読み込み・解析・編集を行う場合は、XML パーサを用いる事が多いですね。

> インターネット上で調査しましたが、上手く検索することができません。
読み取った文字を、AutoRedraw=True な PictureBox に Print して、
その Image を SavePicture で画像化するというのはどうでしょう。
色数の融通が利かないので、ちょっとファイルサイズが大きくなってしまいますけれども、
とりあえず目的は果たせるかと。

投稿時間:2006/12/27(Wed) 16:37
投稿者名:し〜さ〜
Eメール:
URL :
タイトル:
Re^2: VB6.0でのBMPデータ保存の方法
魔界の仮面弁士様、早速の回答ありがとうございます。

> えぇと、BMP というのは、Bitmap 画像のことですよね?
>
> # XML で BMP というと、私は Unicode 0面の
> # Basic Multilingual Plane (基本多言語面) を連想してしまうので…。

 Bitmap画像のことです。説明下手で申し訳ありませんm(_ _)m

> もともと、Form と XML データの間に関連性はありませんよね。
>
> で、『メモリ上での静的な方法』というのが、何を示しているのかわかりませんが、
> VB6 から XML データの読み込み・解析・編集を行う場合は、XML パーサを用いる事が多いですね。

 言いたかったことは、TextBox等で入力した値を使用するのではないということです。
 これもまた説明下手で申し訳ありませんm(_ _)m

> 読み取った文字を、AutoRedraw=True な PictureBox に Print して、
> その Image を SavePicture で画像化するというのはどうでしょう。
> 色数の融通が利かないので、ちょっとファイルサイズが大きくなってしまいますけれども、
> とりあえず目的は果たせるかと。

一応私が考えたコーディングは以下になるのですが、
「ActiveXコンポーネントはオブジェクトを作成出来ません。」
というエラーメッセージが表示されてしまいます。

Private Sub CreBMP(ByVal sName As String)
    Dim p As Object
    Set p = CreateObject("VB.PictureBox")
    
    With p
        .AutoRedraw = True
        .ScaleMode = 1
        .CurrentX = 0.2
        .CurrentY = 0.2
        .Width = (50 * Screen.TwipsPerPixelX) * Len(sName)
        .Height = (50 * Screen.TwipsPerPixelY)
        .ForeColor = vbBlack
        .BackColor = vbWhite
        .FontName = "MS 明朝"
        .FontSize = 32
        p.Print sName
    End With
    SavePicture p.Image, "D:\moji.bmp"
End Sub

どこを修正したらいいのかご教授願います。

投稿時間:2006/12/27(Wed) 17:30
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: VB6.0でのBMPデータ保存の方法
>     Set p = CreateObject("VB.PictureBox")
コントロールは、CreateObject して作成するものではありませんよ。

まぁ、中には CreateObject「にも」対応している ActiveX コントロールも
存在しますが、少なくとも PictureBox は、そうでは無いということで。
(そもそも、PictureBox は ActiveX コントロールですらありませんし)

コントロールを動的にロードしたいのであれば、コントロール配列にして Load するか、
もしくは、Controls.Add メソッドを使うようにしてみてください。


> どこを修正したらいいのかご教授願います。
非表示の Form と PictureBox を持っておき、それを利用するのが手っ取り早いかと。

もし、それが利用できないのであれば(たとえば、App.UnattendedApp = True な場合とか)、
PictureBox を使う事はあきらめ、自前で BMP ファイルを作成する事を検討するとか。

投稿時間:2006/12/28(Thu) 08:22
投稿者名:し〜さ〜
Eメール:
URL :
タイトル:
Re^4: VB6.0でのBMPデータ保存の方法
 魔界の仮面弁士様、回答ありがとうございます。

> もし、それが利用できないのであれば(たとえば、App.UnattendedApp = True な場合とか)、
> PictureBox を使う事はあきらめ、自前で BMP ファイルを作成する事を検討するとか。

 自前でBMPファイルを作成するとは、具体的にどういうことでしょうか?

 WebサービスのDLLとして、Form無しで作成したいと考えております。
 もしFormを使用しないで実現させるとしたらどういった方法がありますでしょうか?

投稿時間:2006/12/28(Thu) 10:26
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^5: VB6.0でのBMPデータ保存の方法
# VB.NET で書いた方が手っ取り早い気がする…。(^^;

>  自前でBMPファイルを作成するとは、具体的にどういうことでしょうか?

ただ作成するだけなら、ビットマップ フォーマットに添った形のバイナリデータを作り、
Put # ステートメントにてファイルに書き込むだけで済みますが……今回問題になるのは、
その画像に「氏名等の文字」を描画する必要があるという点ですね。

この、文字列画像を作成する部分に関しては、『PictureBox(またはForm)の Print メソッド』
または『それに相当する外部コンポーネントや API など』に頼ることになるかと思います。


案0) ユーザ対話モード(App.UnattendedApp)の抑制を諦め、非表示のフォームを利用する。

案1) Doodle2 などの外部コンポーネントを利用する。
http://www.vector.co.jp/soft/winnt/prog/se219120.html

案2) GDI 系の API (DrawText 等)を使って、デバイスコンテキストへの文字列の描画および
ビットマップファイルの作成を行う。

案3) GDI+ のフラット API (GdipDrawString, GdipSaveImageToFile 等)で、GpGraphics への
文字列の描画およびビットマップファイルの作成を行う。
http://msdn.microsoft.com/library/en-us/gdicpp/GDIPlus/GDIPlusreference.asp