画像の一部を切り取って保存する事で困っています。
現在は調べ始めてすぐの段階ですので、少々情報不足な感があって書かせていただいております。
画像は(jpgの必要もあるのですが)主としてbmpの質問をさせて頂きたいと思います。当方VBを使っています。
大きくやりたい事は、VGAサイズの画像(bmp)が手に入る状況で、その絵の中に描かれている縦線のゆらぎ(直線具合)を見るため、x方向から座標位置を検出する事です。
場所を自分で指定したい事と大きすぎるという理由から、その任意な一部(例えば100×100)を切り出し検出をさせたいと思っています。
目標の領域のデータを得ること自体はできそうなのですが、その後の表示や保存という所での知識がありません。
具体的にはGetPixelによって得た配列データ(24bit)だけを持っている状況からbmpを作る方法、Bmp構造体のヘッダの部分に書く内容、などで結局は出力させ方法がいまいちわかりずらく困っています。
あなたの例ではGetBitmapBitsを使ってこういじった方が良いかも・・等言って頂けるとすごく助かる状況です。どなたか経験者の方お願いいたします。
又本やWebの紹介でも結構です。
自分でBmpを作成するのは面倒でしょう。
PictureBoxに部分的にコピーして、SavePictureで保存する方法がお勧めです。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200411/04110125.txt
ここにキーワードが書いてありますので、丁寧に検索すれば似たような、コードが
出てきますよ。
ffさんこんにちは
現在開発中のActiveXコントロールを利用すれば望みの作業が出来ます。
ffさんがやりたい事をコードで書くと次のようになります。
--------------------------------------------------------------
Private Sub Command_Click()
Dim hBmp1 As Long
Dim hBmp2 As Long
Dim str_f As String
Picture1.AutoRedraw = True
str_f = App.Path & "\元画像.bmp"
'ファイルのメモリーに読み込み(メモリの番地がhBmp1に代入と思ってください)
hBmp1 = Stcom1.LoadBmp(str_f)
'もと画像のx=10,y=10を始点として、大きさw=50,h=50の画像をコピーする
hBmp2 = Stcom1.CatBmp(hBmp1, 10, 10, 50, 50)
str_f = App.Path & "\切取画像.bmp"
'取得画像をピクチャーボックスに貼り付け
Picture1.Cls
Stcom1.PictureCopy Picture1.hDC, hBmp2
Picture1.Refresh
'取得画像をファイルに保存
If Stcom1.SaveBmp(hBmp2, str_f) = False Then
MsgBox "画像の保存に失敗" & vbCrLf & "保存先を確認"
End If
'メモリーに書き込まれている画像をクリアー
Stcom1.FreeBmp hBmp1
Stcom1.FreeBmp hBmp2
End Sub
--------------------------------------------------------------
Stcom1がActiveXコントロールです(開発中となっていますが画像の処理機能は完成しています)
他にも色々な機能があります。
・画像の比較(DIBを利用しているので比較処理は早いです。* 64*64ドット以上は遅くなります)
・ディスクトップの画像取得
・ウインドウ(クライアント領域)の画像取得(ウインドウ枠は除外)
・画像の平均(R,G,B)を取得
・画像の平均(S,V,H)を取得
・Stcom.mSleep(1)と言うものもあります。通常APIのSleepは最低10mSですが、1msが利用できます * 正確では無い
等です
利用に関しての制約はありません。フリーなコントロールです。
ただし、コントロールの利用によって発生した損害について製作者は責任を取りません。
詳しい内容についてはメールをください。
以上です。
| ツイート |
|