Zireael |
Отправлено: 11 Марта, 2020 - 01:41:16
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Подскажите можно ли при наведении в это вырезаное окно кликнуть мышью чтобы действие передавалось основному
Выводить изображение на диалог и отлавливать сообщения, примерно так:
code (Отобразить)CODE:#define WS_EX_LAYERED 524288
#define GWL_EXSTYLE -20
#define GWL_STYLE -16
#define LWA_COLORKEY 1
#define COLOR_3DFACE 15
external(INT, "SetLayeredWindowAttributes", "SetLayeredWindowAttributes", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetSysColor", "GetSysColor", "User32.dll");
external(INT, "MoveWindow", "MoveWindow", "User32.dll");
int x=200, y=400;
win w=window ("Program Manager", "Progman", -1); // окно, рабочий стол в данном случае
createdialog(0);
SetWindowLong(gethwnd(0), GWL_EXSTYLE, WS_EX_LAYERED);
SetWindowLong(gethwnd(0), GWL_STYLE, 0);
SetLayeredWindowAttributes(gethwnd(0), GetSysColor(COLOR_3DFACE), 0, LWA_COLORKEY);
showdialog(0, "Dialog", x, y, 200, 150, 1, 1);
visualwindow(formatiw(gethwnd(0)), 0, 0, 0, 200, 150, 0, 0, 100, w);
enabletimer(0);
loop()
{
sleep(10);
}
function getmessage(0, WM_LBUTTONDOWN) // если нажата левая кнопка мыши
{
textout(0, 0, 0, "Координаты клика: "+format(message.x)+", "+format(message.y), 1);
// тут нужные действия
}
// эти сообщения сработают только если диалог в фокусе, т. е. нужно кликнуть по нему
function getmessage(0, WM_KEYDOWN) // если нажата клавиша
{
textout(1, 0, 20, "Нажата клавиша с кодом: "+format(message.wparam), 1);
// тут нужные действия
}
function getmessage(0, WM_SYSKEYDOWN) // если нажата системная клавиша
{
textout(1, 0, 20, "Нажата клавиша с кодом: "+format(message.wparam), 1);
}
CREATE_TIMER(0, 50)
{
if(getkeystate(192)==1)
{
getmouse(x, y);
MoveWindow(gethwnd(0), x, y, 200, 150, 1);
}
} |
|
|
neba2101 |
Отправлено: 07 Ноября, 2020 - 10:29:08
|
Мастер
Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017
Репутация: 4
|
Приветствую. Беру 2 одинаковых изображения разрешением 1900х1000. Первое уменьшаю в Paint до 25% и загружаю в Kibor. Второе без уменьшения загружаю в Kibor и при помощи CODE:visualwindow(0, 0, 0, imagewidth(#img[0][0]), imageheight(#img[0][0]), 0, 0 , 25, #img[0][0]); уменьшаю до 25%. Результат с 1 выводится хорошего качества и без мерцания. Второе изображение выводится гораздо хуже качества и с очень сильным мерцанием.
1.Можно как-то получить уменьшение картинки в Kibor без потери качества?
2.Можно как-то побороть мерцание? От чего оно зависит?
3.Если нельзя вопрос 1 и 2, то можно как-то через код уменьшить изображение раза в 4-5 без потери качества и вывести его на экран без мерцания?(Отредактировано автором: 07 Ноября, 2020 - 10:32:39) |
|
|
Zireael |
Отправлено: 07 Ноября, 2020 - 15:08:54
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: 1.Можно как-то получить уменьшение картинки в Kibor без потери качества?
https://kibor-bot.com/forum/topi...=2&topic=186
Цитата: 2.Можно как-то побороть мерцание? От чего оно зависит?
Выводить в окно, а не на экран. |
|
|
neba2101 |
Отправлено: 07 Ноября, 2020 - 16:26:50
|
Мастер
Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017
Репутация: 4
|
Zireael пишет: Цитата: 1.Можно как-то получить уменьшение картинки в Kibor без потери качества?
https://kibor-bot.com/forum/topi...=2&topic=186
Цитата: 2.Можно как-то побороть мерцание? От чего оно зависит?
Выводить в окно, а не на экран.
Спасибо!!! А как при помощи visualwindow2 вывести изображение из файла?
(Добавление)
Еще вопрос, можно как-то передать вывод изображения на другой ПК с установленным Кибор через инет? Сейчас я делаю скрин окна на 1 ПК, загружаю этот скрин через ФТП, потом скачиваю с 2 ПК и вывожу уменьшенную картинку.(Отредактировано автором: 07 Ноября, 2020 - 16:42:53) |
|
|
Zireael |
Отправлено: 07 Ноября, 2020 - 18:30:32
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: вывести изображение из файла?
code (Отобразить)CODE:+HIDE0>#define CP_ACP 0
#define WS_EX_TRANSPARENT 0x00000020
#define WS_EX_LAYERED 0x00080000
#define GWL_EXSTYLE -20
#define GWL_STYLE -16
#define LWA_COLORKEY 1
#define COLOR_3DFACE 15
#define UnitPixel 2
external(INT, "MultiByteToWideChar", "MultiByteToWideChar", "Kernel32.dll");
external(INT, "GdiplusStartup", "GdiplusStartup", "Gdiplus.dll");
external(INT, "GdiplusShutdown", "GdiplusShutdown", "Gdiplus.dll");
external(INT, "GdipCreateFromHWND", "GdipCreateFromHWND", "Gdiplus.dll");
external(INT, "GdipDrawImageRectRectI", "GdipDrawImageRectRectI", "Gdiplus.dll");
external(INT, "GdipLoadImageFromFile", "GdipLoadImageFromFile", "Gdiplus.dll");
external(INT, "GdipGetImageHeight", "GdipGetImageHeight", "Gdiplus.dll");
external(INT, "GdipGetImageWidth", "GdipGetImageWidth", "Gdiplus.dll");
external(INT, "GdipDisposeImage", "GdipDisposeImage", "Gdiplus.dll");
external(INT, "SetLayeredWindowAttributes", "SetLayeredWindowAttributes", "User32.dll");
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll");
external(INT, "GetSysColor", "GetSysColor", "User32.dll");/HIDE0>
int Token, lnGraphics;
gdiplusstartup(#Token); // инициализация gdi+
string path_to_image = "C:\image111.jpg"; // путь к картинке, допустимые форматы: bmp, jpg, png, gif, tiff
int image, image_width, image_height; // переменные для картинки
load_image(path_to_image, #image, #image_width, #image_height); // загрузить картинку
createdialog(2);
loop()
{
sleep(10);
}
// GdipDisposeImage(image); // обязательно удалять картинку, если она будет часто загружаться
end:;
function visualwindow3(int posX, int posY, int percent)
{
int width = image_width * percent / 100;
int height = image_height * percent / 100;
GdipDrawImageRectRectI(lnGraphics, image, posX, posY, width, height, 0, 0, image_width, image_height, UnitPixel, 0,0,0);
}
function getmessage(2, WM_PAINT)
{
visualwindow3(200, 100, 50); // вывод картинки в координатах 200, 100, сжатие 50%
}
function getmessage(2, WM_CREATE)
{
int displayColor, displayX, displayY;
getdisplay(displayColor, displayX, displayY);
SetWindowLong(gethwnd(2), GWL_EXSTYLE, WS_EX_LAYERED | WS_EX_TRANSPARENT);
SetWindowLong(gethwnd(2), GWL_STYLE, 0);
SetLayeredWindowAttributes(gethwnd(2), GetSysColor(COLOR_3DFACE), 0, LWA_COLORKEY);
showdialog(2, "Диалог", 0, 0, displayX, displayY, 1, 1);
GdipCreateFromHWND(gethwnd(2), address(#lnGraphics));
}
function load_image(string path_to_image, int #h_image, int #image_width, int #image_height)
{
char wchar[999];
initialarray(#wchar[0], 0);
MultiByteToWideChar(CP_ACP, 0, path_to_image, size(path_to_image), address(#wchar[0]), sizearray(wchar));
if(GdipLoadImageFromFile(address(#wchar[0]), address(#h_image))!=0)
{
messagebox("Error load_image");
goto global end;
}
GdipGetImageWidth(h_image, address(#image_width));
GdipGetImageHeight(h_image, address(#image_height));
}
function gdiplusstartup(int #gdiplusToken)
{
char gdiplusStartupInput[16];
initialarray(#gdiplusStartupInput[0], 0);
writeaddress(1, address(#gdiplusStartupInput[0]));
GdiplusStartup(address(#gdiplusToken), address(#gdiplusStartupInput[0]), 0);
} |
|
|
neba2101 |
Отправлено: 07 Ноября, 2020 - 19:36:00
|
Мастер
Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017
Репутация: 4
|
Zireael пишет: Цитата: вывести изображение из файла?
code (Отобразить)CODE:+HIDE0>#define CP_ACP 0
#define WS_EX_TRANSPARENT 0x00000020
#define WS_EX_LAYERED 0x00080000
#define GWL_EXSTYLE -20
#define GWL_STYLE -16
#define LWA_COLORKEY 1
#define COLOR_3DFACE 15
#define UnitPixel 2
external(INT, "MultiByteToWideChar", "MultiByteToWideChar", "Kernel32.dll");
external(INT, "GdiplusStartup", "GdiplusStartup", "Gdiplus.dll");
external(INT, "GdiplusShutdown", "GdiplusShutdown", "Gdiplus.dll");
external(INT, "GdipCreateFromHWND", "GdipCreateFromHWND", "Gdiplus.dll");
external(INT, "GdipDrawImageRectRectI", "GdipDrawImageRectRectI", "Gdiplus.dll");
external(INT, "GdipLoadImageFromFile", "GdipLoadImageFromFile", "Gdiplus.dll");
external(INT, "GdipGetImageHeight", "GdipGetImageHeight", "Gdiplus.dll");
external(INT, "GdipGetImageWidth", "GdipGetImageWidth", "Gdiplus.dll");
external(INT, "GdipDisposeImage", "GdipDisposeImage", "Gdiplus.dll");
external(INT, "SetLayeredWindowAttributes", "SetLayeredWindowAttributes", "User32.dll");
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll");
external(INT, "GetSysColor", "GetSysColor", "User32.dll");/HIDE0>
int Token, lnGraphics;
gdiplusstartup(#Token); // инициализация gdi+
string path_to_image = "C:\image111.jpg"; // путь к картинке, допустимые форматы: bmp, jpg, png, gif, tiff
int image, image_width, image_height; // переменные для картинки
load_image(path_to_image, #image, #image_width, #image_height); // загрузить картинку
createdialog(2);
loop()
{
sleep(10);
}
// GdipDisposeImage(image); // обязательно удалять картинку, если она будет часто загружаться
end:;
function visualwindow3(int posX, int posY, int percent)
{
int width = image_width * percent / 100;
int height = image_height * percent / 100;
GdipDrawImageRectRectI(lnGraphics, image, posX, posY, width, height, 0, 0, image_width, image_height, UnitPixel, 0,0,0);
}
function getmessage(2, WM_PAINT)
{
visualwindow3(200, 100, 50); // вывод картинки в координатах 200, 100, сжатие 50%
}
function getmessage(2, WM_CREATE)
{
int displayColor, displayX, displayY;
getdisplay(displayColor, displayX, displayY);
SetWindowLong(gethwnd(2), GWL_EXSTYLE, WS_EX_LAYERED | WS_EX_TRANSPARENT);
SetWindowLong(gethwnd(2), GWL_STYLE, 0);
SetLayeredWindowAttributes(gethwnd(2), GetSysColor(COLOR_3DFACE), 0, LWA_COLORKEY);
showdialog(2, "Диалог", 0, 0, displayX, displayY, 1, 1);
GdipCreateFromHWND(gethwnd(2), address(#lnGraphics));
}
function load_image(string path_to_image, int #h_image, int #image_width, int #image_height)
{
char wchar[999];
initialarray(#wchar[0], 0);
MultiByteToWideChar(CP_ACP, 0, path_to_image, size(path_to_image), address(#wchar[0]), sizearray(wchar));
if(GdipLoadImageFromFile(address(#wchar[0]), address(#h_image))!=0)
{
messagebox("Error load_image");
goto global end;
}
GdipGetImageWidth(h_image, address(#image_width));
GdipGetImageHeight(h_image, address(#image_height));
}
function gdiplusstartup(int #gdiplusToken)
{
char gdiplusStartupInput[16];
initialarray(#gdiplusStartupInput[0], 0);
writeaddress(1, address(#gdiplusStartupInput[0]));
GdiplusStartup(address(#gdiplusToken), address(#gdiplusStartupInput[0]), 0);
}
Спасибо! Ты лучший! |
|
|
neba2101 |
Отправлено: 08 Ноября, 2020 - 16:13:49
|
Мастер
Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017
Репутация: 4
|
Zireael пишет: Цитата: вывести изображение из файла?
code (Отобразить)CODE:+HIDE0>#define CP_ACP 0
#define WS_EX_TRANSPARENT 0x00000020
#define WS_EX_LAYERED 0x00080000
#define GWL_EXSTYLE -20
#define GWL_STYLE -16
#define LWA_COLORKEY 1
#define COLOR_3DFACE 15
#define UnitPixel 2
external(INT, "MultiByteToWideChar", "MultiByteToWideChar", "Kernel32.dll");
external(INT, "GdiplusStartup", "GdiplusStartup", "Gdiplus.dll");
external(INT, "GdiplusShutdown", "GdiplusShutdown", "Gdiplus.dll");
external(INT, "GdipCreateFromHWND", "GdipCreateFromHWND", "Gdiplus.dll");
external(INT, "GdipDrawImageRectRectI", "GdipDrawImageRectRectI", "Gdiplus.dll");
external(INT, "GdipLoadImageFromFile", "GdipLoadImageFromFile", "Gdiplus.dll");
external(INT, "GdipGetImageHeight", "GdipGetImageHeight", "Gdiplus.dll");
external(INT, "GdipGetImageWidth", "GdipGetImageWidth", "Gdiplus.dll");
external(INT, "GdipDisposeImage", "GdipDisposeImage", "Gdiplus.dll");
external(INT, "SetLayeredWindowAttributes", "SetLayeredWindowAttributes", "User32.dll");
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll");
external(INT, "GetSysColor", "GetSysColor", "User32.dll");/HIDE0>
int Token, lnGraphics;
gdiplusstartup(#Token); // инициализация gdi+
string path_to_image = "C:\image111.jpg"; // путь к картинке, допустимые форматы: bmp, jpg, png, gif, tiff
int image, image_width, image_height; // переменные для картинки
load_image(path_to_image, #image, #image_width, #image_height); // загрузить картинку
createdialog(2);
loop()
{
sleep(10);
}
// GdipDisposeImage(image); // обязательно удалять картинку, если она будет часто загружаться
end:;
function visualwindow3(int posX, int posY, int percent)
{
int width = image_width * percent / 100;
int height = image_height * percent / 100;
GdipDrawImageRectRectI(lnGraphics, image, posX, posY, width, height, 0, 0, image_width, image_height, UnitPixel, 0,0,0);
}
function getmessage(2, WM_PAINT)
{
visualwindow3(200, 100, 50); // вывод картинки в координатах 200, 100, сжатие 50%
}
function getmessage(2, WM_CREATE)
{
int displayColor, displayX, displayY;
getdisplay(displayColor, displayX, displayY);
SetWindowLong(gethwnd(2), GWL_EXSTYLE, WS_EX_LAYERED | WS_EX_TRANSPARENT);
SetWindowLong(gethwnd(2), GWL_STYLE, 0);
SetLayeredWindowAttributes(gethwnd(2), GetSysColor(COLOR_3DFACE), 0, LWA_COLORKEY);
showdialog(2, "Диалог", 0, 0, displayX, displayY, 1, 1);
GdipCreateFromHWND(gethwnd(2), address(#lnGraphics));
}
function load_image(string path_to_image, int #h_image, int #image_width, int #image_height)
{
char wchar[999];
initialarray(#wchar[0], 0);
MultiByteToWideChar(CP_ACP, 0, path_to_image, size(path_to_image), address(#wchar[0]), sizearray(wchar));
if(GdipLoadImageFromFile(address(#wchar[0]), address(#h_image))!=0)
{
messagebox("Error load_image");
goto global end;
}
GdipGetImageWidth(h_image, address(#image_width));
GdipGetImageHeight(h_image, address(#image_height));
}
function gdiplusstartup(int #gdiplusToken)
{
char gdiplusStartupInput[16];
initialarray(#gdiplusStartupInput[0], 0);
writeaddress(1, address(#gdiplusStartupInput[0]));
GdiplusStartup(address(#gdiplusToken), address(#gdiplusStartupInput[0]), 0);
}
А можно как-то сохранить уменьшенное изображение не вызывая его вывод в окно? |
|
|
Zireael |
Отправлено: 08 Ноября, 2020 - 17:53:24
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: сохранить уменьшенное изображение
code (Отобразить)CODE:+HIDE0>#define CP_ACP 0
#define SRCCOPY 13369376
external(INT, "WideCharToMultiByte", "WideCharToMultiByte", "Kernel32.dll");
external(INT, "MultiByteToWideChar", "MultiByteToWideChar", "Kernel32.dll");
external(INT, "StringFromGUID2", "StringFromGUID2", "Ole32.dll");
external(INT, "CLSIDFromString", "CLSIDFromString", "Ole32.dll");
external(INT, "GdiplusStartup", "GdiplusStartup", "Gdiplus.dll");
external(INT, "GdiplusShutdown", "GdiplusShutdown", "Gdiplus.dll");
external(INT, "GdipGetImageEncodersSize", "GdipGetImageEncodersSize", "Gdiplus.dll");
external(INT, "GdipGetImageEncoders", "GdipGetImageEncoders", "Gdiplus.dll");
external(INT, "GdipDisposeImage", "GdipDisposeImage", "Gdiplus.dll");
external(INT, "GdipCreateFromHWND", "GdipCreateFromHWND", "Gdiplus.dll");
external(INT, "GdipDeleteGraphics", "GdipDeleteGraphics", "Gdiplus.dll");
external(INT, "GdipSaveImageToFile", "GdipSaveImageToFile", "Gdiplus.dll");
external(INT, "GetDC", "GetDC", "User32.dll");
external(INT, "ReleaseDC", "ReleaseDC", "User32.dll");
external(INT, "DeleteDC", "DeleteDC", "Gdi32.dll");
external(INT, "SelectObject", "SelectObject", "Gdi32.dll");
external(INT, "DeleteObject", "DeleteObject", "Gdi32.dll");
external(INT, "CreateCompatibleDC", "CreateCompatibleDC", "Gdi32.dll");
external(INT, "CreateCompatibleBitmap", "CreateCompatibleBitmap", "Gdi32.dll");
external(INT, "BitBlt", "BitBlt", "Gdi32.dll");
external(INT, "GdipCreateBitmapFromHBITMAP", "GdipCreateBitmapFromHBITMAP", "Gdiplus.dll");
external(INT, "GdipGetImageThumbnail", "GdipGetImageThumbnail", "Gdiplus.dll");/HIDE0>
int Token;
gdiplusstartup(#Token); // инициализация gdi+
// скрин с окна
win w=window ("Program Manager", "Progman", -1);
// 200, 100, 800, 500 - координаты скрина
// 100%
save_screen("C:\sreen1.bmp", 200, 100, 800, 500, 100, formatwi(w));
// 70%
save_screen("C:\sreen2.bmp", 200, 100, 800, 500, 70, formatwi(w));
// 70%, формат jpeg
save_screen("C:\sreen3.jpeg", 200, 100, 800, 500, 70, formatwi(w));
// 50%, скрин с экрана последним параметром 0
save_screen("C:\sreen4.bmp", 0, 0, 1920, 1080, 50, 0);
GdiplusShutdown(Token);
-HIDE1>function gdiplusstartup(int #gdiplusToken)
{
char gdiplusStartupInput[16];
initialarray(#gdiplusStartupInput[0], 0);
writeaddress(1, address(#gdiplusStartupInput[0]));
GdiplusStartup(address(#gdiplusToken), address(#gdiplusStartupInput[0]), 0);
}
function save_screen(string path, int sx, int sy, int ex, int ey, int percent, int _window)
{
char wchar[999], clsid[16];
int hScreen = GetDC(_window);
int hDc = CreateCompatibleDC(hScreen);
int hBitmap = CreateCompatibleBitmap(hScreen, ex-sx, ey-sy);
int old_obj = SelectObject(hDc, hBitmap);
BitBlt(hDc, 0, 0, ex-sx, ey-sy, hScreen, sx, sy, SRCCOPY);
int bitmap;
GdipCreateBitmapFromHBITMAP(hBitmap, 0, address(#bitmap));
string format_image;
regexsearch(1, #format_image, path, "(?<=\.).+");
GetEncoderClsid(format_image, #clsid[0]);
MultiByteToWideChar(CP_ACP, 0, path, -1, address(#wchar[0]), sizearray(wchar));
int width_result = (ex-sx) * percent / 100;
int height_result = (ey-sy) * percent / 100;
GdipGetImageThumbnail(bitmap, width_result, height_result, address(#bitmap), 0, 0);
GdipSaveImageToFile(bitmap, address(#wchar[0]), address(#clsid[0]), 0);
SelectObject(hDc, old_obj);
DeleteDC(hDc);
ReleaseDC(_window, hScreen);
DeleteObject(hBitmap);
GdipDisposeImage(bitmap);
}
function GetEncoderClsid(string format_image, char #Clsid)
{
char ImageCodecInfo[9999], tchar[39], w_Clsid[78];
int numEncoders, _size;
string temp;
GdipGetImageEncodersSize(address(#numEncoders), address(#_size));
GdipGetImageEncoders(numEncoders, _size, address(#ImageCodecInfo[0]));
for(int i=0; i<numEncoders; i++)
{
int adres = codhexi(#ImageCodecInfo[i*76+40], 4);
int count = WideCharToMultiByte(CP_ACP, 0, adres, -1, address(#tchar[0]), sizearray(tchar), 0, 0);
if(regexsearch(1, #temp, format(#tchar[0], count), format_image, IGNORECASE))
{
StringFromGUID2(address(#ImageCodecInfo[i*76]), address(#w_Clsid[0]), sizearray(w_Clsid));
CLSIDFromString(address(#w_Clsid[0]), address(#Clsid[0]));
return 1;
}
}
return 0;
}/HIDE1> |
|
|
neba2101 |
Отправлено: 08 Ноября, 2020 - 18:27:07
|
Мастер
Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017
Репутация: 4
|
Zireael пишет: Цитата: сохранить уменьшенное изображение
code (Отобразить)CODE:+HIDE0>#define CP_ACP 0
#define SRCCOPY 13369376
external(INT, "WideCharToMultiByte", "WideCharToMultiByte", "Kernel32.dll");
external(INT, "MultiByteToWideChar", "MultiByteToWideChar", "Kernel32.dll");
external(INT, "StringFromGUID2", "StringFromGUID2", "Ole32.dll");
external(INT, "CLSIDFromString", "CLSIDFromString", "Ole32.dll");
external(INT, "GdiplusStartup", "GdiplusStartup", "Gdiplus.dll");
external(INT, "GdiplusShutdown", "GdiplusShutdown", "Gdiplus.dll");
external(INT, "GdipGetImageEncodersSize", "GdipGetImageEncodersSize", "Gdiplus.dll");
external(INT, "GdipGetImageEncoders", "GdipGetImageEncoders", "Gdiplus.dll");
external(INT, "GdipDisposeImage", "GdipDisposeImage", "Gdiplus.dll");
external(INT, "GdipCreateFromHWND", "GdipCreateFromHWND", "Gdiplus.dll");
external(INT, "GdipDeleteGraphics", "GdipDeleteGraphics", "Gdiplus.dll");
external(INT, "GdipSaveImageToFile", "GdipSaveImageToFile", "Gdiplus.dll");
external(INT, "GetDC", "GetDC", "User32.dll");
external(INT, "ReleaseDC", "ReleaseDC", "User32.dll");
external(INT, "DeleteDC", "DeleteDC", "Gdi32.dll");
external(INT, "SelectObject", "SelectObject", "Gdi32.dll");
external(INT, "DeleteObject", "DeleteObject", "Gdi32.dll");
external(INT, "CreateCompatibleDC", "CreateCompatibleDC", "Gdi32.dll");
external(INT, "CreateCompatibleBitmap", "CreateCompatibleBitmap", "Gdi32.dll");
external(INT, "BitBlt", "BitBlt", "Gdi32.dll");
external(INT, "GdipCreateBitmapFromHBITMAP", "GdipCreateBitmapFromHBITMAP", "Gdiplus.dll");
external(INT, "GdipGetImageThumbnail", "GdipGetImageThumbnail", "Gdiplus.dll");/HIDE0>
int Token;
gdiplusstartup(#Token); // инициализация gdi+
// скрин с окна
win w=window ("Program Manager", "Progman", -1);
// 200, 100, 800, 500 - координаты скрина
// 100%
save_screen("C:\sreen1.bmp", 200, 100, 800, 500, 100, formatwi(w));
// 70%
save_screen("C:\sreen2.bmp", 200, 100, 800, 500, 70, formatwi(w));
// 70%, формат jpeg
save_screen("C:\sreen3.jpeg", 200, 100, 800, 500, 70, formatwi(w));
// 50%, скрин с экрана последним параметром 0
save_screen("C:\sreen4.bmp", 0, 0, 1920, 1080, 50, 0);
GdiplusShutdown(Token);
-HIDE1>function gdiplusstartup(int #gdiplusToken)
{
char gdiplusStartupInput[16];
initialarray(#gdiplusStartupInput[0], 0);
writeaddress(1, address(#gdiplusStartupInput[0]));
GdiplusStartup(address(#gdiplusToken), address(#gdiplusStartupInput[0]), 0);
}
function save_screen(string path, int sx, int sy, int ex, int ey, int percent, int _window)
{
char wchar[999], clsid[16];
int hScreen = GetDC(_window);
int hDc = CreateCompatibleDC(hScreen);
int hBitmap = CreateCompatibleBitmap(hScreen, ex-sx, ey-sy);
int old_obj = SelectObject(hDc, hBitmap);
BitBlt(hDc, 0, 0, ex-sx, ey-sy, hScreen, sx, sy, SRCCOPY);
int bitmap;
GdipCreateBitmapFromHBITMAP(hBitmap, 0, address(#bitmap));
string format_image;
regexsearch(1, #format_image, path, "(?<=\.).+");
GetEncoderClsid(format_image, #clsid[0]);
MultiByteToWideChar(CP_ACP, 0, path, -1, address(#wchar[0]), sizearray(wchar));
int width_result = (ex-sx) * percent / 100;
int height_result = (ey-sy) * percent / 100;
GdipGetImageThumbnail(bitmap, width_result, height_result, address(#bitmap), 0, 0);
GdipSaveImageToFile(bitmap, address(#wchar[0]), address(#clsid[0]), 0);
SelectObject(hDc, old_obj);
DeleteDC(hDc);
ReleaseDC(_window, hScreen);
DeleteObject(hBitmap);
GdipDisposeImage(bitmap);
}
function GetEncoderClsid(string format_image, char #Clsid)
{
char ImageCodecInfo[9999], tchar[39], w_Clsid[78];
int numEncoders, _size;
string temp;
GdipGetImageEncodersSize(address(#numEncoders), address(#_size));
GdipGetImageEncoders(numEncoders, _size, address(#ImageCodecInfo[0]));
for(int i=0; i<numEncoders; i++)
{
int adres = codhexi(#ImageCodecInfo[i*76+40], 4);
int count = WideCharToMultiByte(CP_ACP, 0, adres, -1, address(#tchar[0]), sizearray(tchar), 0, 0);
if(regexsearch(1, #temp, format(#tchar[0], count), format_image, IGNORECASE))
{
StringFromGUID2(address(#ImageCodecInfo[i*76]), address(#w_Clsid[0]), sizearray(w_Clsid));
CLSIDFromString(address(#w_Clsid[0]), address(#Clsid[0]));
return 1;
}
}
return 0;
}/HIDE1>
Огромное еще раз спасибо! |
|
|
neba2101 |
Отправлено: 08 Ноября, 2020 - 21:39:56
|
Мастер
Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017
Репутация: 4
|
Zireael пишет: Цитата: сохранить уменьшенное изображение
code (Отобразить)CODE:+HIDE0>#define CP_ACP 0
#define SRCCOPY 13369376
external(INT, "WideCharToMultiByte", "WideCharToMultiByte", "Kernel32.dll");
external(INT, "MultiByteToWideChar", "MultiByteToWideChar", "Kernel32.dll");
external(INT, "StringFromGUID2", "StringFromGUID2", "Ole32.dll");
external(INT, "CLSIDFromString", "CLSIDFromString", "Ole32.dll");
external(INT, "GdiplusStartup", "GdiplusStartup", "Gdiplus.dll");
external(INT, "GdiplusShutdown", "GdiplusShutdown", "Gdiplus.dll");
external(INT, "GdipGetImageEncodersSize", "GdipGetImageEncodersSize", "Gdiplus.dll");
external(INT, "GdipGetImageEncoders", "GdipGetImageEncoders", "Gdiplus.dll");
external(INT, "GdipDisposeImage", "GdipDisposeImage", "Gdiplus.dll");
external(INT, "GdipCreateFromHWND", "GdipCreateFromHWND", "Gdiplus.dll");
external(INT, "GdipDeleteGraphics", "GdipDeleteGraphics", "Gdiplus.dll");
external(INT, "GdipSaveImageToFile", "GdipSaveImageToFile", "Gdiplus.dll");
external(INT, "GetDC", "GetDC", "User32.dll");
external(INT, "ReleaseDC", "ReleaseDC", "User32.dll");
external(INT, "DeleteDC", "DeleteDC", "Gdi32.dll");
external(INT, "SelectObject", "SelectObject", "Gdi32.dll");
external(INT, "DeleteObject", "DeleteObject", "Gdi32.dll");
external(INT, "CreateCompatibleDC", "CreateCompatibleDC", "Gdi32.dll");
external(INT, "CreateCompatibleBitmap", "CreateCompatibleBitmap", "Gdi32.dll");
external(INT, "BitBlt", "BitBlt", "Gdi32.dll");
external(INT, "GdipCreateBitmapFromHBITMAP", "GdipCreateBitmapFromHBITMAP", "Gdiplus.dll");
external(INT, "GdipGetImageThumbnail", "GdipGetImageThumbnail", "Gdiplus.dll");/HIDE0>
int Token;
gdiplusstartup(#Token); // инициализация gdi+
// скрин с окна
win w=window ("Program Manager", "Progman", -1);
// 200, 100, 800, 500 - координаты скрина
// 100%
save_screen("C:\sreen1.bmp", 200, 100, 800, 500, 100, formatwi(w));
// 70%
save_screen("C:\sreen2.bmp", 200, 100, 800, 500, 70, formatwi(w));
// 70%, формат jpeg
save_screen("C:\sreen3.jpeg", 200, 100, 800, 500, 70, formatwi(w));
// 50%, скрин с экрана последним параметром 0
save_screen("C:\sreen4.bmp", 0, 0, 1920, 1080, 50, 0);
GdiplusShutdown(Token);
-HIDE1>function gdiplusstartup(int #gdiplusToken)
{
char gdiplusStartupInput[16];
initialarray(#gdiplusStartupInput[0], 0);
writeaddress(1, address(#gdiplusStartupInput[0]));
GdiplusStartup(address(#gdiplusToken), address(#gdiplusStartupInput[0]), 0);
}
function save_screen(string path, int sx, int sy, int ex, int ey, int percent, int _window)
{
char wchar[999], clsid[16];
int hScreen = GetDC(_window);
int hDc = CreateCompatibleDC(hScreen);
int hBitmap = CreateCompatibleBitmap(hScreen, ex-sx, ey-sy);
int old_obj = SelectObject(hDc, hBitmap);
BitBlt(hDc, 0, 0, ex-sx, ey-sy, hScreen, sx, sy, SRCCOPY);
int bitmap;
GdipCreateBitmapFromHBITMAP(hBitmap, 0, address(#bitmap));
string format_image;
regexsearch(1, #format_image, path, "(?<=\.).+");
GetEncoderClsid(format_image, #clsid[0]);
MultiByteToWideChar(CP_ACP, 0, path, -1, address(#wchar[0]), sizearray(wchar));
int width_result = (ex-sx) * percent / 100;
int height_result = (ey-sy) * percent / 100;
GdipGetImageThumbnail(bitmap, width_result, height_result, address(#bitmap), 0, 0);
GdipSaveImageToFile(bitmap, address(#wchar[0]), address(#clsid[0]), 0);
SelectObject(hDc, old_obj);
DeleteDC(hDc);
ReleaseDC(_window, hScreen);
DeleteObject(hBitmap);
GdipDisposeImage(bitmap);
}
function GetEncoderClsid(string format_image, char #Clsid)
{
char ImageCodecInfo[9999], tchar[39], w_Clsid[78];
int numEncoders, _size;
string temp;
GdipGetImageEncodersSize(address(#numEncoders), address(#_size));
GdipGetImageEncoders(numEncoders, _size, address(#ImageCodecInfo[0]));
for(int i=0; i<numEncoders; i++)
{
int adres = codhexi(#ImageCodecInfo[i*76+40], 4);
int count = WideCharToMultiByte(CP_ACP, 0, adres, -1, address(#tchar[0]), sizearray(tchar), 0, 0);
if(regexsearch(1, #temp, format(#tchar[0], count), format_image, IGNORECASE))
{
StringFromGUID2(address(#ImageCodecInfo[i*76]), address(#w_Clsid[0]), sizearray(w_Clsid));
CLSIDFromString(address(#w_Clsid[0]), address(#Clsid[0]));
return 1;
}
}
return 0;
}/HIDE1>
По отдельности все работает отлично. Не могу понять как объединить эти 2 кода...
Такой код выводит только изображение, но не сохраняет новые. Код должен делать и то и то по кругу. Извиняюсь за назойливость и благодарю за помощь.
Весь код не помещается в сообщение.
Мой кривокод (Отобразить)CODE:
//тут #define и external
int Token, lnGraphics;
gdiplusstartup(#Token);
win w=window ("Калькулятор", "ApplicationFrameWindow", -1);
string path_to_image = pathfolder()+"1.jpeg"; // путь к картинке, допустимые форматы: bmp, jpg, png, gif, tiff
int image, image_width, image_height; // переменные для картинки
createdialog(2);
loop()
{
save_screen(pathfolder()+"1.jpeg", 0, 0, w.width, w.height, 50, formatwi(w));
sleep(2500)
load_image(path_to_image, #image, #image_width, #image_height); // загрузить картинку
sleep(2500);
}
// GdipDisposeImage(image); // обязательно удалять картинку, если она будет часто загружаться
end:;
//ниже все функции из 2 скриптов
(Отредактировано автором: 08 Ноября, 2020 - 21:43:47) |
|
|
|