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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
1012
UMADDS ファイル7解決


UMA

リンク

2015/10/12(Mon) 12:15:04|NO.72232

今、画像ビューアーみたいなものを作っていますが、ddsファイルを読み込むモジュールが見つかりません。
どなたか、読み込む方法、モジュールなど知りませんか?



この記事に返信する


kanamaru

リンク

2015/10/12(Mon) 12:39:32|NO.72233

どうやらdirectx独自フォーマットのようです。
hspdxで使えると思います。



UMA

リンク

2015/10/12(Mon) 13:00:56|NO.72235

どうやらhspdx自体に画像読み込み機能は無く、既に読み込んだ画像のコピーぐらいしかできない模様なのですが



kanamaru

リンク

2015/10/12(Mon) 13:37:35|NO.72238

じゃあ、
http://download.goo.ne.jp/software/contents/soft/winnt/art/se506192.html
からダウンロードして、
http://hspnext.com/hspkura/hspkura14.htm#contents01
を参考にして読み込むのはどうですか?
まだ試してないし、hspから使えないsusieプラグインもあるそうですが。



UMA

リンク

2015/10/12(Mon) 14:45:15|NO.72241

うまくいかないので、自分なりに解決していきたいと思います。
ありがとうございます。



暇人

リンク

2015/10/12(Mon) 22:37:09|NO.72263

α値も反映させたい場合もう一工夫必要・・・

#module #uselib "d3d9.dll" #cfunc Direct3DCreate9 "Direct3DCreate9" int #usecom IDirect3D9 "{81BDCBCA-64D4-426d-AE8D-AD0147F4275C}" #comfunc IDirect3D9_CreateDevice 16 int,int,int,int,int,int #uselib "d3dx9_36.dll" #func D3DXLoadSurfaceFromFile "D3DXLoadSurfaceFromFileA" comobj,int,int,str,int,int,int,int #func D3DXGetImageInfoFromFile "D3DXGetImageInfoFromFileA" sptr,var #usecom IDirect3DDevice9 "{D0223B96-BF7A-43fd-92BD-A43B0D82B9EB}" #comfunc IDirect3DDevice9_CreateOffscreenPlainSurface 36 int,int,int,int,int,int #usecom IDirect3DSurface9 "{0CFBAF3A-9FF6-429a-99B3-A2796AF8B89B}" #comfunc IDirect3DSurface9_GetDC 15 int #comfunc IDirect3DSurface9_ReleaseDC 16 int #uselib "gdi32.dll" #func DeleteDC "DeleteDC" int #func BitBlt "BitBlt" int,int,int,int,int,int,int,int,int ////画像ファイルをロード //[ ImageLoad "filename",p1 ] // "filename" : ロードするファイル名 // p1=0〜1(0) : 画像ロードモード //戻り値:refstrにファイルのフォーマット名が半角大文字3文字で返る //基本的に標準命令のpicloadと同じですがp1に1を指定してもα値含む透過処理はされません。 //読み込めるファイルフォーマットは.bmp、.dds、.dib、.jpg、.png、 .tga #deffunc ImageLoad str fname,int opt if vartype(g_pd3d) ! 6 { def_selid=ginfo_sel screen 100,1,1,2 //DirectXのウィンドウを作るのにID100を使用 ret = Direct3DCreate9(32) // D3D_SDK_VERSION 32 if( ret == 0 ) : dialog "error : Direct3DCreate9" : end newcom g_pd3d, , -1, ret dim d3dpp, 14 d3dpp(2) = 0 // BackBufferFormat = D3DFMT_UNKNOWN d3dpp(6) = 1 // SwapEffect = D3DSWAPEFFECT_DISCARD d3dpp(8) = 1 // Windowed = 1 d3dpp(9) = 1 // EnableAutoDepthStencil = 1 d3dpp(10) = 80 // AutoDepthStencilFormat = D3DFMT_D16 d3dpp(13) = 0x80000000 // PresentationInterval // D3DDEVTYPE_HAL 1 D3DCREATE_SOFTWARE_VERTEXPROCESSING 0x20 IDirect3D9_CreateDevice g_pd3d, 0, 1, hwnd, 0x20, varptr(d3dpp), varptr(ret) if stat : dialog "error : IDirect3D9_CreateDevice\n"+stat : end newcom g_pd3dDev, , -1, ret gsel def_selid dim SrcInfo,7 D3DXIMAGE_FILEFORMAT@= "BMP","JPG","TGA","PNG","DDS","PPM","DIB","HDR","PFM" } D3DXGetImageInfoFromFile fname,SrcInfo if stat : dialog "error : D3DXGetImageInfoFromFile\n"+stat : end IDirect3DDevice9_CreateOffscreenPlainSurface g_pd3dDev,SrcInfo,SrcInfo(1),21,2, varptr(pTexture),0//D3DFMT_A8R8G8B8 if stat : dialog "error : IDirect3DDevice9_CreateOffscreenPlainSurface\n"+stat : end newcom Surface, , -1, pTexture D3DXLoadSurfaceFromFile Surface,0,0,fname,0,1,0,0 if stat : dialog "error : D3DXLoadSurfaceFromFile\n"+stat : end IDirect3DSurface9_GetDC Surface,varptr(phdcSurface) if stat : dialog "error : IDirect3DSurface9_GetDC\n"+stat : end mref bmscr,67 if (opt&1)=0 { if bmscr(17)=1 { buffer ginfo_sel,SrcInfo,SrcInfo(1) BitBlt hdc,0,0,SrcInfo,SrcInfo(1),phdcSurface,0,0,0x00CC0020 //SRCCOPY }else{ screen ginfo_sel,SrcInfo,SrcInfo(1) BitBlt hdc,0,0,SrcInfo,SrcInfo(1),phdcSurface,0,0,0x00CC0020 //SRCCOPY redraw } }else{ if opt>2 {color:boxf} BitBlt hdc,ginfo_cx,ginfo_cy,SrcInfo,SrcInfo(1),phdcSurface,0,0,0x00CC0020 //SRCCOPY if bmscr(19)=65537 {redraw} } IDirect3DSurface9_ReleaseDC Surface,phdcSurface if stat : dialog "error : IDirect3DSurface9_ReleaseDC\n"+stat : end delcom Surface//Surface削除 Surface=0 return D3DXIMAGE_FILEFORMAT@(SrcInfo(6)) ////イメージ ファイルのオリジナルの内容の記述を返す。 //[ 変数 = getImageInfo(index) ] // index : 0〜6(下記参照) // // 0=Width オリジナル イメージの幅 (ピクセル単位)。 // 1=Height オリジナル イメージの高さ (ピクセル単位)。 // 2=Depth オリジナル イメージの深度 (ピクセル単位)。 // 3=MipLevels オリジナル イメージのミップ レベルの数。 // 4=Format オリジナル イメージのデータを最も厳密に記述する D3DFORMAT 列挙型からの値。 // 5=ResourceType ファイルに格納されているテクスチャのタイプを表す。D3DRTYPE_TEXTURE、D3DRTYPE_VOLUMETEXTURE、または D3DRTYPE_CUBETEXTURE。 // 6=ImageFileFormat イメージ ファイルのフォーマットを表す。 #defcfunc getImageInfo int index return SrcInfo(index) //終了処理 #deffunc dx9_Exit onexit if vartype(Surface) = 6 : delcom Surface:Surface=0 if vartype(g_pd3dDev) = 6 : delcom g_pd3dDev:g_pd3dDev=0 if vartype(g_pd3d) = 6 : delcom g_pd3d:g_pd3d=0 return #global ImageLoad dir_exe+"\\sample\\hgimg4\\res\\sky.dds" title "ImageFileFormat : "+refstr font "MS ゴシック",24,16 color infname="Width","Height","Depth","MipLevels","Format","ResourceType","ImageFileFormat" repeat 7 mes infname(cnt)+" : "+getImageInfo(cnt) loop



暇人

リンク

2015/10/12(Mon) 22:49:02|NO.72265

書き忘れ
d3dx9_36.dllを使用してるのでOSインストール後に
一回はDirectXを更新してないと実行できません。



暇人

リンク

2015/10/14(Wed) 00:49:50|NO.72289

オプションに2を指定したときの動作が違ってたのを修正
α値に対応してgmode7用にbuffer IMAGELOAD_BUFID内に加工
但しファイルフォーマットがD3DFMT_A8R8G8B8)と32(D3DFMT_A8B8G8R8)場合のみ

#module #uselib "d3d9.dll" #cfunc Direct3DCreate9 "Direct3DCreate9" int #usecom IDirect3D9 "{81BDCBCA-64D4-426d-AE8D-AD0147F4275C}" #comfunc IDirect3D9_CreateDevice 16 int,int,int,int,int,int #uselib "d3dx9_36.dll" #func D3DXLoadSurfaceFromFile "D3DXLoadSurfaceFromFileA" comobj,int,int,str,int,int,int,int #func D3DXGetImageInfoFromFile "D3DXGetImageInfoFromFileA" sptr,var #usecom IDirect3DDevice9 "{D0223B96-BF7A-43fd-92BD-A43B0D82B9EB}" #comfunc IDirect3DDevice9_CreateOffscreenPlainSurface 36 int,int,int,int,int,int #usecom IDirect3DSurface9 "{0CFBAF3A-9FF6-429a-99B3-A2796AF8B89B}" #comfunc IDirect3DSurface9_GetContainer 11 int,int #comfunc IDirect3DSurface9_LockRect 13 int,int,int #comfunc IDirect3DSurface9_UnlockRect 14 #comfunc IDirect3DSurface9_GetDC 15 int #comfunc IDirect3DSurface9_ReleaseDC 16 int #uselib "gdi32.dll" #func DeleteDC "DeleteDC" int #func BitBlt "BitBlt" int,int,int,int,int,int,int,int,int #cfunc SetDIBitsToDevice "SetDIBitsToDevice" int,int,int,int,int,int,int,int,int,int,var,int #define global DIRECTX_WINID 100 #define global IMAGELOAD_BUFID 101 ////画像ファイルをロード //[ ImageLoad "filename",p1 ] // "filename" : ロードするファイル名 // p1=0〜1(0) : 画像ロードモード //戻り値1:statにD3DFMTが返る21(D3DFMT_A8R8G8B8)と32(D3DFMT_A8B8G8R8)の場合IMAGELOAD_BUFIDのbufferにmoude7用のデータ形式で読み込まれる //戻り値2:refstrにファイルのフォーマット名が半角大文字3文字で返る //基本的に標準命令のpicloadと同じなので詳しくはpicloadのヘルプを参照 //読み込めるファイルフォーマットは.bmp、.dds、.dib、.jpg、.png、 .tga #deffunc ImageLoad str fname,int opt def_selid=ginfo_sel if vartype(g_pd3d) ! 6 { screen DIRECTX_WINID@,1,1,2 //DirectXのウィンドウを作るのにDIRECTX_WINIDを使用 ret = Direct3DCreate9(32) // D3D_SDK_VERSION 32 if( ret == 0 ) : dialog "error : Direct3DCreate9" : end newcom g_pd3d, , -1, ret dim d3dpp, 14 d3dpp(2) = 0 // BackBufferFormat = D3DFMT_UNKNOWN d3dpp(6) = 1 // SwapEffect = D3DSWAPEFFECT_DISCARD d3dpp(8) = 1 // Windowed = 1 d3dpp(9) = 1 // EnableAutoDepthStencil = 1 d3dpp(10) = 80 // AutoDepthStencilFormat = D3DFMT_D16 d3dpp(13) = 0x80000000 // PresentationInterval // D3DDEVTYPE_HAL 1 D3DCREATE_SOFTWARE_VERTEXPROCESSING 0x20 IDirect3D9_CreateDevice g_pd3d, 0, 1, hwnd, 0x20, varptr(d3dpp), varptr(ret) if stat : dialog "error : IDirect3D9_CreateDevice\n"+stat : end newcom g_pd3dDev, , -1, ret gsel def_selid dim SrcInfo,7 dim D3DLOCKED_RECT8,2 D3DXIMAGE_FILEFORMAT@= "BMP","JPG","TGA","PNG","DDS","PPM","DIB","HDR","PFM" } D3DXGetImageInfoFromFile fname,SrcInfo if stat : dialog "error : D3DXGetImageInfoFromFile\n"+stat : end IDirect3DDevice9_CreateOffscreenPlainSurface g_pd3dDev,SrcInfo,SrcInfo(1),21,2, varptr(pTexture),0//D3DFMT_A8R8G8B8 if stat : dialog "error : IDirect3DDevice9_CreateOffscreenPlainSurface\n"+stat : end newcom Surface, , -1, pTexture D3DXLoadSurfaceFromFile Surface,0,0,fname,0,1,0,0 if stat : dialog "error : D3DXLoadSurfaceFromFile\n"+stat : end mref _stat,64 mref bmscr,67 if SrcInfo(4)=21 or SrcInfo(4)=32 { dim LPBITMAPINFO,14 LPBITMAPINFO = 40 ,SrcInfo ,-SrcInfo(1) ,(32<<16) | 1,0x00000003,0;dup_tsizex*dup_tsizey*(bit/8) //上下反転した32ビットの色データとしてLPBITMAPINFOを設定 LPBITMAPINFO(10)=$ff000000,$ff000000,$ff000000 buffer IMAGELOAD_BUFID@,SrcInfo*2,SrcInfo(1) IDirect3DSurface9_LockRect Surface,varptr(D3DLOCKED_RECT8), 0, 0x00000010|0x00008000 if stat : dialog "error : IDirect3DSurface9_LockRect\n"+stat : end CopyLine = SetDIBitsToDevice(hdc, SrcInfo, 0, SrcInfo, SrcInfo(1), 0,0, 0, SrcInfo(1), D3DLOCKED_RECT8(1),LPBITMAPINFO, 0) LPBITMAPINFO(10)=$ff0000,$ff00,$ff CopyLine = SetDIBitsToDevice(hdc, 0, 0, SrcInfo, SrcInfo(1), 0,0, 0, SrcInfo(1), D3DLOCKED_RECT8(1),LPBITMAPINFO, 0) IDirect3DSurface9_UnlockRect Surface if stat : dialog "error : IDirect3DSurface9_UnlockRect\n"+stat : end if (opt&1)=0 { if bmscr(17)=1 {buffer def_selid,SrcInfo,SrcInfo(1)}else{ if bmscr(17)=3 {bgscr def_selid,SrcInfo,SrcInfo(1)}else{screen def_selid,SrcInfo,SrcInfo(1)} } if opt=2 {gmode_c=BMSCR(40):color:boxf:color (gmode_c&$ff0000)>>16,(gmode_c&$ff00)>>8,gmode_c&$ff} gmode 7,SrcInfo,SrcInfo(1) gcopy IMAGELOAD_BUFID@,0,0,SrcInfo,SrcInfo(1) gmode 0,32,32,0 }else{ gsel def_selid gmode_mxya=BMSCR(35),BMSCR(33),BMSCR(34),BMSCR(65) gmode 7,SrcInfo,SrcInfo(1) gcopy IMAGELOAD_BUFID@,0,0,SrcInfo,SrcInfo(1) gmode gmode_mxya,gmode_mxya(1),gmode_mxya(2),gmode_mxya(3) } }else{ IDirect3DSurface9_GetDC Surface,varptr(phdcSurface) if stat : dialog "error : IDirect3DSurface9_GetDC\n"+stat : end if (opt&1)=0 { if bmscr(17)=1 { buffer def_selid,SrcInfo,SrcInfo(1) BitBlt hdc,0,0,SrcInfo,SrcInfo(1),phdcSurface,0,0,0x00CC0020 //SRCCOPY }else{ if bmscr(17)=3 {bgscr def_selid,SrcInfo,SrcInfo(1)}else{screen def_selid,SrcInfo,SrcInfo(1)} BitBlt hdc,0,0,SrcInfo,SrcInfo(1),phdcSurface,0,0,0x00CC0020 //SRCCOPY redraw } }else{ BitBlt hdc,ginfo_cx,ginfo_cy,SrcInfo,SrcInfo(1),phdcSurface,0,0,0x00CC0020 //SRCCOPY if bmscr(19)=65537 {redraw} } IDirect3DSurface9_ReleaseDC Surface,phdcSurface if stat : dialog "error : IDirect3DSurface9_ReleaseDC\n"+stat : end } delcom Surface//Surface削除 Surface=0 _stat=SrcInfo(4) return D3DXIMAGE_FILEFORMAT@(SrcInfo(6)) ////特定のイメージ ファイルに関する情報を取得します。 //[ ImageLoad fname,p_SrcInfo ] // fname : ロードするファイル名 // p_SrcInfo : ソースファイル内のデータの記述を格納する配列(データ順はgetImageInfo()の下記参照) #deffunc GetImageInfoFromFile str fname,array p_SrcInfo dim p_SrcInfo,7 D3DXGetImageInfoFromFile fname,p_SrcInfo return stat ////ImageLoad実行後にイメージ ファイルに関する情報を取得します。 //[ 変数 = getImageInfo(index) ] // index : 0〜6(下記参照) // // 0=Width オリジナル イメージの幅 (ピクセル単位)。 // 1=Height オリジナル イメージの高さ (ピクセル単位)。 // 2=Depth オリジナル イメージの深度 (ピクセル単位)。 // 3=MipLevels オリジナル イメージのミップ レベルの数。 // 4=Format オリジナル イメージのデータを最も厳密に記述する D3DFORMAT 列挙型からの値。 // 5=ResourceType ファイルに格納されているテクスチャのタイプを表す。D3DRTYPE_TEXTURE、D3DRTYPE_VOLUMETEXTURE、または D3DRTYPE_CUBETEXTURE。 // 6=ImageFileFormat イメージ ファイルのフォーマットを表す。 #defcfunc getImageInfo int index return SrcInfo(index) //終了処理 #deffunc dx9_Exit onexit if vartype(Surface) = 6 : delcom Surface:Surface=0 if vartype(g_pd3dDev) = 6 : delcom g_pd3dDev:g_pd3dDev=0 if vartype(g_pd3d) = 6 : delcom g_pd3d:g_pd3d=0 return #global xloop=ginfo_sx/8 yloop=ginfo_sy/8 repeat xloop*yloop gradf ((cnt\xloop))*8,(cnt/xloop)*8,8,8,0,$444444^$222222*((cnt+((cnt/xloop)\2))\2),$444444^$222222*((cnt+((cnt/xloop)\2))\2) loop ImageLoad dir_exe+"\\hsptv\\hsptv_img.png",1 title "ImageFileFormat : "+refstr if stat=21 or stat=32 {//21(D3DFMT_A8R8G8B8)と32(D3DFMT_A8B8G8R8)だったらIMAGELOAD_BUFIDの内容を見えるようにコピー screen 10,getImageInfo(0)*2,getImageInfo(1),0,1000,0 gmode 0,getImageInfo(0)*2,getImageInfo(1) gcopy IMAGELOAD_BUFID } font "MS ゴシック",24,16 color 255 infname="Width","Height","Depth","MipLevels","Format","ResourceType","ImageFileFormat" repeat 7 mes infname(cnt)+" : "+getImageInfo(cnt) loop



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