|
PureBasic Мощный кросс-платформенный язык среднего уровня на основе BASIC. Подходит для решения широкого круга задач. |
04.04.2015, 23:59
|
#1
|
ПроЭктировщик
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений (для 271 пользователей)
|
Как рисовать на картинке (ImageOutput)?
подзатупил я малость((
удаляю вопрос. ответ простой - накладывать маску, чтобы задать нужную форму картинке, нужно примерно так:
UsePNGImageDecoder() UsePNGImageEncoder() UseJPEGImageDecoder()
Procedure RoundCorners(Image) If IsImage(Image) Protected w = ImageWidth(Image) Protected h = ImageHeight(Image) Protected imgMask = CatchImage(#PB_Any, ?maskData, ?maskEnd - ?maskData) If StartDrawing(ImageOutput(imgMask)) DrawingMode(#PB_2DDrawing_AlphaClip) RoundBox(0, 0, w, h, w / 5, h / 5, RGBA(0, 0, 0, 255)) DrawingMode(#PB_2DDrawing_AlphaClip) DrawImage(ImageID(Image), 0, 0) StopDrawing() ProcedureReturn imgMask EndIf EndIf EndProcedure
Global fn.s = OpenFileRequester("LoadImage", "", "Png and Jpg images|*.png;*.jpg|Png images|*.png|Jpg images|*.jpg", 0) imgPhoto = LoadImage(#PB_Any, fn) imgR = RoundCorners(imgPhoto) fn = SaveFileRequester("SaveImage", fn, "All files|*.*", 0) If fn SaveImage(imgR, fn, #PB_ImagePlugin_PNG) FreeImage(imgPhoto) FreeImage(imgR) EndIf
DataSection maskData: IncludeBinary "mask.png" maskEnd: EndDataSection
на всякий случай: картинки для тестов использовал эти:
жаль, не выходит нарисовать маску с помощью RoundBox. не рисуется, гадина(((
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
Последний раз редактировалось barsunduk, 05.04.2015 в 21:11.
Причина: ответ найден
|
(Offline)
|
|
05.04.2015, 00:16
|
#2
|
ПроЭктировщик
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений (для 271 пользователей)
|
Ответ: Как рисовать на картинке (ImageOutput)?
winAPI делает это моментально, регионами, но я хз, как это на васик переложить. кто умеет, признавайтесь!
GetWindowRect(hWnd, &wnd); hdc = BeginPaint(hWnd, &ps); hdcMem = CreateCompatibleDC(hdc); for (int i = 0; i < n; ++i) { HRGN rgn = CreateRoundRectRgn(info[i].pos.x, info[i].pos.y, info[i].pos.x + CARD_WIDTH, info[i].pos.y + CARD_HEIGHT, 7, 7); SelectClipRgn(hdc, rgn); oldBitmap = SelectObject(hdcMem, cards[info[i].card]); GetObject(cards[info[i].card], sizeof(bitmap), &bitmap); BitBlt(hdc, info[i].pos.x, info[i].pos.y, bitmap.bmWidth, bitmap.bmHeight, hdcMem, 0, 0, SRCCOPY); SelectObject(hdcMem, oldBitmap); } //Don't forget to delete your region (SelectClipRgn makes a copy of it)
этот вопрос тоже отпадает за ненадобностью.
и вообще просьба к модераторам удалить эту тему. вряд ли ещё найдётся человек, который не разберётся, как накладывать маски.
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
Последний раз редактировалось barsunduk, 05.04.2015 в 20:55.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:03.
|