Задача.
Имею созданное изображение размером WxH
нужно создать второе размером HxW поворотом влево на 90 гр.
нашел близкий код в теме
Просмотрщик фотографий
стал модифицировать в
Procedure ImageRotateLeft(ImageSource, ImageTarget) ;
img1_id=ImageID(ImageSource)
img2_id=ImageID(ImageTarget)
result = #False
If IsImage(ImageSource) And IsImage(ImageTarget)
; Get current img details
hOldImage.l = img1_id
img_w = ImageWidth(Image)
img_h = ImageHeight(Image)
hNewImage.l = img2_id
;set up corners for H flip
new.corners
new\x1 = 0
new\y1 = img_w
new\x2 = 0
new\y2 = 0
new\x3 = img_h
new\y3 = img_w
; create device contexts (placeholders) and select images into them
main_dc = GetDC_(WindowID(1))
source_dc = CreateCompatibleDC_(main_dc)
SelectObject_(source_dc,hOldImage)
dest_dc = CreateCompatibleDC_(main_dc)
SelectObject_(dest_dc,hNewImage)
result = PlgBlt_(dest_dc,@new,source_dc,0,0,img_w,img_h,0,0,0)
;clean up
DeleteDC_(source_dc)
DeleteDC_(dest_dc)
EndIf
;Debug "ImageFlipH(): "+Str(ElapsedMilliseconds()-msImageFlipH)+"ms"
ProcedureReturn result
EndProcedureкоторый используется так
hImage1 = CreateImage(#PB_Any , Xmax, Ymax)
hImage2 = CreateImage(#PB_Any , Ymax, Xmax)
....
If StartDrawing(ImageOutput(hImage1))
....
StopDrawing()
SaveImage(hImage1, GraphFileT$ , #PB_ImagePlugin_PNG )
If ImageRotateLeft(hImage1, hImage2)
SaveImage(hImage2, GraphFile$ , #PB_ImagePlugin_PNG )
EndIf
FreeImage(hImage1)
FreeImage(hImage2)
EndIfВ результате имею чистый второй граф файл
Предполагаю что дело в main_dc = GetDC_(WindowID(1))
т.к. у программы нет никакого окна - она работает сервисом.
Какой DC нужно брать в таком случае?
Или пробовать другие способы?
Например - попиксельный перенос Point(x, y) - Plot(x, y [, Color])
Но здесь как-то нужно переключаться и одного изображения на другое.
И это будет требовать гораздо больше времени.
может поможет 