Задача.
Имею созданное изображение размером 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])
Но здесь как-то нужно переключаться и одного изображения на другое.
И это будет требовать гораздо больше времени.