forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   PureBasic (http://forum.boolean.name/forumdisplay.php?f=90)
-   -   Как рисовать на картинке (ImageOutput)? (http://forum.boolean.name/showthread.php?t=19774)

barsunduk 04.04.2015 23:59

Как рисовать на картинке (ImageOutput)?
 
подзатупил я малость((
удаляю вопрос. ответ простой - накладывать маску, чтобы задать нужную форму картинке, нужно примерно так:
PHP код:

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. не рисуется, гадина(((

barsunduk 05.04.2015 00:16

Ответ: Как рисовать на картинке (ImageOutput)?
 
winAPI делает это моментально, регионами, но я хз, как это на васик переложить. кто умеет, признавайтесь!
PHP код:

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) 

этот вопрос тоже отпадает за ненадобностью.
и вообще просьба к модераторам удалить эту тему. вряд ли ещё найдётся человек, который не разберётся, как накладывать маски.


Часовой пояс GMT +4, время: 14:19.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot