HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0119
うぼーimgctl.dllを使った画像保存について5解決


うぼー

リンク

2012/1/19(Thu) 23:31:26|NO.44411

imgctl.dllを使って画像の読み込みをしています。
現在はbmpsaveで保存しているのですが
せっかくならjpg、png出力にも対応したい思い、色々試しましたががやり方がわかりませんでした。

現在のソース

#uselib "imgctl.dll" #cfunc ToDIB "ToDIB" str #cfunc PNGAtoDIB "PNGAtoDIB" str #func HeadDIB "HeadDIB" int,var #func DIBtoDC "DIBtoDC" int,int,int,int,int,int,int,int,int #const global SRCCOPY $CC0020 #cfunc DCtoDIB "DCtoDIB" int,int,int,int,int #func DeleteDIB "DeleteDIB" in #include "winmm.as" ImageName = dropfile ImageDIB = ToDIB(ImageName) HeadDIB ImageDIB,ImageData dupptr picX, varptr(ImageData)+4, 4, 4 dupptr picY, varptr(ImageData)+8, 4, 4 buffer 1, picX*2,picY DIBtoDC hdc, 0, 0, picX, picY, ImageDIB, 0, 0, SRCCOPY DeleteDIB ImageDIB screen 0, picX, picY,2 gcopy 1,0,0 ,picX, picY ;〜〜line命令などのメイン画像処理〜〜 bmpsave "" + getpath(dropfile,1) +"_見えないよ.bmp" end
画面からDIBデータを取るには

ImageDIB = DCtoDIB(hdc, 0,0, picX, picY)
で出来ましたが、
DIBtoJPGとDIBtoPNGがわかりません

とりあえず

#uselib "imgctl.dll" #cfunc ToDIB "ToDIB" str #func DIBtoPNG "DIBtoPNG" int,int,int #func DIBtoJPG "DIBtoJPG" int,int,int,int #func DeleteDIB "DeleteDIB" int dropfile = dirinfo(4) if peek(dropfile, ) = '"' : getstr dropfile, dropfile, 1, '"' DIBdata = ToDIB(dropfile) pngfile = a.png jpgfile = a.jpg DIBtoPNG(pngfile,DIBdata,0) DIBtoJPG(jpgfile,DIBdata,100,0)
とやってみるのですが error4 パラメーター式の記述が無効です
と出てしまいます。

DIBtoPNGの説明?はこれです

> BOOL DIBtoPNG(LPCSTR lpPngFile, HDIBC hDIB, BOOL bInterlacing)

> DIBデータからlpPngFileのPNGファイルを作成します。
> bInterlacingにTRUEを設定すると、インターレースPNGになります。

自分はlpPngFileはファイルネーム、hDIBはDIBデータ、bInterlacingは細かい設定用だと思ったのですが違うようです。
どなたかDIBtoPNGとDIBtoJPGの使い方を教えて下さい。



この記事に返信する


check

リンク

2012/1/19(Thu) 23:56:18|NO.44414

その前にいろいろと直すところがあるんじゃね。
そしてどの行でエラーが出たか書いてくれないと分からん。

HSPのエラーが出ているって事はまずHSPのスクリプト側に問題があるんだよ。
imgctl.dllの使い方のほうではない。



MillkeyWeler

リンク

2012/1/20(Fri) 01:48:58|NO.44415

check さんが言うように、初歩的な間違えが満載だった。

[imgctl使用バージョン]
imgctl.dll ver 1.27


#uselib "imgctl.dll" #cfunc ToDIB "ToDIB" sptr #func DIBtoJPG "DIBtoJPG" sptr,int,int,int #func DIBtoPNG "DIBtoPNG" sptr,int,int #func DeleteDIB "DeleteDIB" int dropfile="TEST.BMP" DIBdata = ToDIB(dropfile) if DIBdata = 0 : dialog "ロードエラー" : end jpgfile = "d:\\a.jpg" pngfile = "d:\\b.png" DIBtoJPG jpgfile,DIBdata,100,0 DIBtoPNG pngfile,DIBdata,0 DeleteDIB DIBdata

imgctl.dll ver 1.26 だと png 保存時にエラーが発生しますので、ご注意を。
ver 1.27 は、作者ホームページよりダウンロード可能です。
http://www.ruche-home.net/download#imgctl



うぼー

リンク

2012/1/20(Fri) 07:39:33|NO.44417

checkさんMillkeyWelerさんありがとうございます。
どこかのサイトからコピペして改変して使ってたもので使い方がわかっていませんでした…

#func DIBtoPNG "DIBtoPNG" sptr,int,int
は文字列が入る所が sptr、数字が入る所が int ですね
lpPngFileはフルパスで指定、そのフルパスでつかときは\を\\とする…
基本的なことですね

そして無事にpngの出力に成功しました!
jpgは時間が無いので今度試してみます

ありがとうございました <(_ _)>



ザーメン

リンク

2012/1/20(Fri) 08:36:41|NO.44419

相対パスでも\は\\ですね



うぼー

リンク

2012/1/20(Fri) 17:20:00|NO.44421

ザーメンさん
朝で寝ぼけていたようです…



ONION software Copyright 1997-2023(c) All rights reserved.