1

Тема: AHK: Gdip_ResizeBitmap

Нашел функцию для изменения размера bitmap, как ее можно переделать, чтобы она не увеличивала размеры "полотна"? То есть мне нужно взять область 50 на 50, увеличить ее допустим в 3 раза, и чтобы размер так и остался 50 на 50, а не 150 на 150.

Gdip_ResizeBitmap(pBitmap, PercentOrWH, Dispose := 1)
{
	Gdip_GetImageDimensions(pBitmap, origW, origH)
	if PercentOrWH contains w,h
	{
		RegExMatch(PercentOrWH, "i)w(\d*)", w), RegExMatch(PercentOrWH, "i)h(\d*)", h)
		NewWidth := w1, NewHeight := h1
		NewWidth := (NewWidth = "") ? origW/(origH/NewHeight) : NewWidth
		NewHeight := (NewHeight = "") ? origH/(origW/NewWidth) : NewHeight
	}
	else
	NewWidth := origW*PercentOrWH/100, NewHeight := origH*PercentOrWH/100
	pBitmap2 := Gdip_CreateBitmap(NewWidth, NewHeight)
	G2 := Gdip_GraphicsFromImage(pBitmap2), Gdip_SetSmoothingMode(G2, 4), Gdip_SetInterpolationMode(G2, 7)
	Gdip_DrawImage(G2, pBitmap, 0, 0, NewWidth, NewHeight)
	Gdip_DeleteGraphics(G2)
	if Dispose
		Gdip_DisposeImage(pBitmap)
	return pBitmap2
}
Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

2 (изменено: __Михаил__, 2022-02-12 20:51:45)

Re: AHK: Gdip_ResizeBitmap

За это отвечает строка: 'pBitmap2 := Gdip_CreateBitmap(NewWidth, NewHeight)'. Если немного подумать можно решить эту проблему.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

3

Re: AHK: Gdip_ResizeBitmap

Phoenixxx_Czar пишет:

взять область 50 на 50, увеличить ее допустим в 3 раза, и чтобы размер так и остался 50 на 50, а не 150 на 150.

Непонятно, какой результат вы хотите получить. В любом случае, посмотрите описание функции Gdip_DrawImage() в GDIp.ahk, и, возможно, ситуация прояснится.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: AHK: Gdip_ResizeBitmap

Необходимо получить увеличенную картинку (150х150) но обрезать к 50х50 на выходе из функции.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

5

Re: AHK: Gdip_ResizeBitmap

Обрезать картинку 150х150 до 50х50 можно 10000 способами.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6 (изменено: __Михаил__, 2022-02-12 22:18:21)

Re: AHK: Gdip_ResizeBitmap

Зачем 10000 способов? У нас тут есть готовая функция. И я сомневаюсь что есть боле 10 действительно различных способов без индуского кода.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

7

Re: AHK: Gdip_ResizeBitmap

teadrinker пишет:

можно 10000 способами

На самом деле 10201.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Gdip_ResizeBitmap

Были конкретные тесты? Где об этом можно почитать?

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

9

Re: AHK: Gdip_ResizeBitmap

Тесты чего? Представьте, у вас есть квадрат 3х3. Сколькими способами из него можно вырезать квадрат 2х2?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Gdip_ResizeBitmap

teadrinker пишет:

На самом деле 10201.

А почему не 10000?
Я посчитал (100 вариантов по горизонтали * 100 вариантов по вертикали).

11

Re: AHK: Gdip_ResizeBitmap

Если есть квадрат 4х4, а нужно вырезать 2х2, то сколько по горизонтали?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: Gdip_ResizeBitmap

Верно 10201. Я сразу и не сообразил.