VB6で、PictureBoxに表示した絵を、解像度を指定(例えば、600dpi)して
保存する方法を教えて下さい。
検索すると、魔界の仮面弁士さんがGdipSaveImageToFile を使用して
JPEG保存されているのを見かけましたが、これを流用することで可能で
しょうか?
dpiをどう指定するのか謎ですが、PictureBoxを指定の大きさに変更して、PaintPictureやらBitBltでコピーして保存したらいいと思いますが
JPEG自体が複雑なのでよくわからなのですが
JFIFアプリケーションでしたら
JPEG形式で保存したのち
そのファイルからセグメントを抜き出す。
ピクセル濃度を変更する。って手順になるんですかね?
かなり適当なDPI変更のみのサンプル そもそもフォーマットすらしらないのでwちょっと調べた結果です。
Public Type JFIF_SEG
SOI_SEG As Integer
APP0 As Integer
SEG_LEN As Integer
JFIF_Mark(5) As Byte
Vers As Integer
Unit As Byte
X_den As Integer
Y_den As Integer
X_thumb As Integer
Y_thumb As Integer
End Type
Public JFIF As JFIF_SEG
'////////////////////////////////////////////////////////////////////////////////////
'DPI変更 JpegFilePath=変更したいJPEGパス X_DPI=変更後の横DPI Y_DPI=変更後の縦DPI
'////////////////////////////////////////////////////////////////////////////////////
Public Sub Change_SEG(JpegFilePath As String, X_DPI As Integer, Y_DPI As Integer)
Dim fno As Long
Dim errorflag As Boolean
fno = FreeFile
Open JpegFilePath For Binary As #fno
Get #fno, , JFIF 'ファイルからセグメント取得
Close #fno
If JFIF.SOI_SEG <> &HD8FF Then errorflag = True 'SOIマーカーかチェック
If JFIF.APP0 <> &HE0FF Then errorflag = True 'APP0かチェック
If InStr(StrConv(JFIF.JFIF_Mark, vbUnicode), "JFIF") = 0 Then errorflag = True 'JFIFかチェック
If errorflag = False Then
JFIF.X_den = X_DPI
JFIF.Y_den = Y_DPI
fno = FreeFile
Open JpegFilePath For Binary As #fno
Put #fno, , JFIF
Close #fno
Else
MsgBox "未対応形式", vbCritical, "エラー"
End If
End Sub
Public JFIF As JFIF_SEG
これパブリックの意味がないや。
GDI+ 使うなら GdipBitmapSetResolution かな。
日本語の解説サイトはなさそうですけど。
通ってみたさん
通り巣鴨さん
Hongliangさん
ご回答ありがとうございます。
ご回答頂いた内容で一度トライしてみます。
すみません。「解決」をチェックしてませんでした。
ツイート | ![]() |