Дальнейшее развитие предыдущего примера. Появилась возможность сохранять область фильтрованного изображения в графический файл BMP формата, а также изменять размер изображения.
<META HTTP-EQUIV=Content-Type content='text/html;charset=windows-1251'>
<HTML>
<!--
---------------------------------------------------------------------------------
Пример работы графических фильтров DXImageTransform для изменения изображения в HTA,HTML документе.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Нажмите кнопку "Открыть" и выберите произвольное изображение [bmp,jpg,gif].
Выберите комбинацию эффектов путем простановки флажков в левой части документа.
Примените эффекты нажав кнопку "Применить".
Чтобы вернуться к исходному изображению снимите все флажки и вновь нажмите "Применить".
Для изменения размера изображения нажимайте кнопки "M +" или "M -".
Для восстановления исходного размера изображения, щелкните по рисунку левой кнопкой мыши.
Для сохранения области фильтрованного изображения в BMP формат, нажмите кнопку "Сохранить".
---------------------------------------------------------------------------------
Lang. JavaScript, на платформе HTA для Internet Explorer 5.5 и выше
Потребуется установленный LangMF 7.7.0.0 и выше
OC Win98/Me/XP
---------------------------------------------------------------------------------
-->
<TITLE>DXImageTransform_Viewer</TITLE>
<HTA:APPLICATION
ID ='DXImageTransform_Viewer'
APPLICATIONNAME ='DXImageTransform_Viewer'
windowState ='maximize'/>
<!----------------------------------------------------------------------------------------------------------->
<STYLE type=text/css>
BODY { background-color: white; border: 5px; border-style: outset; margin: 0;}
TD { height: 20;
font-family: Lucida Console;
font-size: 14px;
background-color: #dfe754;
border-style: solid;
border-width: 2px;
border-color: black;
padding: 8px;
align: left;}
INPUT { border: 1px solid yellow;
height: 30;
font-family: Lucida Console;
font-size: 14px; }
</STYLE>
<BODY>
<!----------------------------------------------------------------------------------------------------------->
<IMG ID='img1' style='position: absolute; top: 10; left: 200' onclick='img1.style.width="auto";'>
<!----------------------------------------------------------------------------------------------------------->
<DIV ID='batonsSet' style='position: absolute; top: 10; left: 5; width: 140;'>
<TABLE>
<TR><TD colspan=2><INPUT style='width: 70;' TYPE=FILE ID='ImgInp' size=5 onchange='DisplayImage();'></TD></TR>
<FORM NAME='frm1'>
<TR><TD><INPUT TYPE=CHECKBOX ID='c1'></TD><TD>MotionBlur</TD></TR>
<TR><TD><INPUT TYPE=CHECKBOX ID='c2'></TD><TD>Wave </TD></TR>
<TR><TD><INPUT TYPE=CHECKBOX ID='c3'></TD><TD>Emboss </TD></TR>
<TR><TD><INPUT TYPE=CHECKBOX ID='c4'></TD><TD>XRay </TD></TR>
<TR><TD><INPUT TYPE=CHECKBOX ID='c5'></TD><TD>GrayScale </TD></TR>
<TR><TD><INPUT TYPE=CHECKBOX ID='c6'></TD><TD>Glow </TD></TR>
<TR><TD><INPUT TYPE=CHECKBOX ID='c7'></TD><TD>Shadow </TD></TR>
</FORM>
<TR><TD colspan=2><INPUT style='width: 120;' TYPE=BUTTON VALUE='Применить' onclick='Set_Effect();'></TD></TR>
<TR><TD colspan=2><INPUT style='width: 120;' TYPE=BUTTON VALUE='Сохранить' onclick='SaveForFile();'></TD></TR>
<TR>
<TD colspan=2>
<INPUT style='width: 55;' TYPE=BUTTON VALUE='M +' onclick='SetScale(1);'>
<INPUT style='width: 55;' TYPE=BUTTON VALUE='М -' onclick='SetScale(-1);'>
</TD>
</TR>
<TR><TD colspan=2><INPUT style='width: 120;' TYPE=BUTTON VALUE='Закрыть' onclick='window.close();'></TD></TR>
</TABLE>
</DIV>
<!----------------------------------------------------------------------------------------------------------->
<PRE ID='LMFCode' style='visibility: hidden;'>
<#Module=LANG_MF_WINDOW_SPY>
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub Load(cmdstr)
End Sub
'[Сохранение скриншота окна содержащего фильтрованное изображение]
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Function SaveWindowScreenShot(FileName)
'[Сохранение в формат BMP]
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DefFileName=Sys.File.GetFSideN(FileName)
If CLng(Mid(lmf_Version,1,1) & Mid(lmf_Version,3,1))>=78 Then
SaveFileDlg =Sys.CDlg.ShowSave( _
"BMP files (*.bmp)|*.bmp", _
"Файл для сохранения:", _
"", _
".bmp", _
hWnd, _
2, _
1, _
DefFileName)
Else '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SaveFileDlg =Sys.CDlg.ShowSave( _
"Файл для сохранения:", _
"BMP files (*.bmp)|*.bmp", _
"", _
".bmp", _
hWnd, _
2, _
1, _
DefFileName)
End If
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If SaveFileDlg="" Then Exit Function
Sys.cSleep(300)
Const SW_MAXIMIZE =3
Const CF_BITMAP =2
'[Изменение параметров отображения страницы]
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Set el1=WND.document.getElementbyId("batonsSet")
el1.style.visibility="hidden"
DoEvents
Set el2=WND.document.getElementbyId("img1")
el2.style.left=10
DoEvents
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WND.scrollTo 0,0
DoEvents
WND.moveTo 0,0
DoEvents
Sys.cSleep(300)
'[Определение дескриптора окна фильтрованного изображения]
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
hWnd1 =Sys.DynApi.CallFunction( "USER32.DLL", _
"GetForegroundWindow")
'[Максимизация окна]
hwnd =Sys.DynApi.CallFunction( "USER32.DLL", _
"ShowWindow", _
hWnd1,SW_MAXIMIZE)
DoEvents
'[Определение дескриптора окна Internet_Explorer Server]
hwnd =Sys.DynApi.CallFunction( "USER32.DLL", _
"GetTopWindow", _
hWnd1)
DoEvents
Sys.cSleep(100)
'[Определение размеров области отображения]
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Set body=WND.document.getElementsByTagName("body")(0)
DoEvents
cWidth =body.clientWidth
cHeight =body.clientHeight
DoEvents
Sys.cSleep(100)
'[Получение действительного контекста окна]
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
hDCIe =Sys.DynApi.CallFunction( "USER32.DLL", _
"GetWindowDC", _
hWnd)
'[Создание связанного контекста]
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
hCompDCIe=Sys.DynApi.CallFunction( "GDI32.DLL", _
"CreateCompatibleDC", _
hWndIe)
'[Создание связанного BITMAP]
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
hBM =Sys.DynApi.CallFunction( "GDI32.DLL", _
"CreateCompatibleBitmap", _
hDCIe,cWidth,cHeight)
'[Выбор связанного Bitmap в связанный контекст]
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
hBMComp =Sys.DynApi.CallFunction( "GDI32.DLL", _
"SelectObject", _
hCompDCIe,hBM)
'[Копирование действительного контекста на связанный контекст]
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
hRes =Sys.DynApi.CallFunction( "GDI32.DLL", _
"BitBlt", _
hCompDCIe, _
0, _
0, _
cWidth, _
cHeight, _
hDCIe, _
0, _
0, _
vbSrcCopy)
'[Возврат совместимого Bitmap из связанного контекста]
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
hBM =Sys.DynApi.CallFunction( "GDI32.DLL", _
"SelectObject", _
hCompDCIe,hBMComp)
Sys.cSleep(100)
'[Помещение данных в буфер обмена]
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
hClip= Sys.DynApi.CallFunction("USER32.DLL","OpenClipboard",0)
Sys.DynApi.CallFunction "USER32.DLL","EmptyClipboard"
hRes= Sys.DynApi.CallFunction("USER32.DLL","SetClipboardData",CF_BITMAP,hBM)
Sys.DynApi.CallFunction "USER32.DLL","CloseClipboard"
Sys.cSleep(100)
'[Извлечение данных буфера обмена и запись в файл]
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Set NewPic=Sys.CreateImage()
NewPic.AutoSize=1
NewPic.Picture=Sys.ClipBoard.GetData(CF_BITMAP)
DoEvents
Sys.Conv.Str2File Sys.Conv.Image2Str(NewPic),SaveFileDlg
DoEvents
Sys.ClipBoard.Clear()
DoEvents
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MsgBox "Область изображения сохранена", _
vbSystemModal+vbInformation, _
"Сохранение фильтрованного изображения"
Sys.cSleep(100)
'[Восстановление параметров отображения страницы]
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
el1.style.visibility="visible"
DoEvents
el2.style.left=200
DoEvents
End Function
<#Module>
</PRE>
<!----------------------------------------------------------------------------------------------------------->
<SCRIPT Language='JavaScript'>
//----------------------------------------------------------------------
try
{
var LMX =new ActiveXObject('Atomix.LangMF')
}
catch(err)
{alert('Установите LangMf 7.7 и выше.');window.close();}
//----------------------------------------------------------------------
LMX.AddObject(window,'WND')
//----------------------------------------------------------------------
var frm=document.forms[0]
//----------------------------------------------------------------------
//Массив графических фильтров
var Filters=new Array(
"progid:DXImageTransform.Microsoft.MotionBlur (Direction=1,Strength=200)",
"progid:DXImageTransform.Microsoft.Wave (phase=5,freq=6,strength=10,lightStrength=10)",
"progid:DXImageTransform.Microsoft.Emboss (enables='true')",
"progid:DXImageTransform.Microsoft.BasicImage (XRay=1);",
"progid:DXImageTransform.Microsoft.BasicImage (GrayScale=10)",
"progid:DXImageTransform.Microsoft.Glow (Color='purple',Streigth=100)",
"progid:DXImageTransform.Microsoft.Shadow (Color='red',Direction='left',Streigth=100)")
//----------------------------------------------------------------------
//Загрузка изображения
function DisplayImage()
{
//Сброс флажков
for (i=0;i<=frm.length-1;i++)
{frm.elements[i].checked=false}
with (img1)
{
//Установка пустого фильтра
style.filter=''
//Установка изображения
style.width='auto'
src=ImgInp.value
}
}
//----------------------------------------------------------------------
//Включение группы фильтров
function Set_Effect()
{
if (!ImgInp.value){alert('Изображение отсутствует.');return;}
var filt=''
//Создание комбинации фильтров
for (i=0;i<=frm.length-1;i++)
{
if (frm.elements[i].checked){filt=filt+Filters[i]+'\\\n'}
}
//Установка комбинации фильтров
img1.style.filter=filt
}
//----------------------------------------------------------------------
function SaveForFile()
{
if (!ImgInp.value){alert('Изображение отсутствует.');return;}
LMX.FuncRun('SaveWindowScreenShot',1,ImgInp.value)
}
//----------------------------------------------------------------------
function SetScale(param)
{
if (!ImgInp.value){alert('Изображение отсутствует.');return;}
img1.style.width=param*100+img1.width
}
//----------------------------------------------------------------------
function window.onload()
{
LMX.Command(LMFCode.innerText)
}
//----------------------------------------------------------------------
function window.onclose()
{LMX.Reset()}
//----------------------------------------------------------------------
//poltergeyst
</SCRIPT>
</BODY>
</HTML>
Применённым в этом примере методом можно сохранять в BMP файл скриншот любого окна.