garfield9992003 hat geschrieben:Bei einer DinA4-Seite mit 300 dpi dauert das For-Plot-Next jedoch

Sagte ich doch, weshalb ich Dir oben schon SetDIBits_()
vorschlug.
Code: Alles auswählen
;
; by Danilo, 25.04.2005
;
#ImageWidth = 500
#ImageHeight = 255
Procedure Mem2Image(Image,Width,Height,mem)
Structure _LTI_BITMAPINFO
bmiHeader.BITMAPINFOHEADER
bmiColors.RGBQUAD[1]
EndStructure
hBmp = UseImage(Image)
If hBmp
hDC = StartDrawing(ImageOutput())
If hDC
bmi._LTI_BITMAPINFO
bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi\bmiheader\biWidth = Width
bmi\bmiheader\biHeight = Height
bmi\bmiheader\biPlanes = 1
bmi\bmiheader\biBitCount = 24
bmi\bmiheader\biCompression = #BI_RGB
If SetDIBits_(hDC,hBmp,0,ImageHeight(),mem,bmi,#DIB_RGB_COLORS) <> 0
Result = hBmp
EndIf
StopDrawing()
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Structure _RGB
r.b
g.b
b.b
EndStructure
; alloc memory array
mem = AllocateMemory(#ImageWidth*#ImageHeight*SizeOf(_RGB))
If mem=0 : MessageRequester("ERROR","Cant allocate memory!"):End : EndIf
; fill memory array
For y = 0 To #ImageHeight-1
RtlFillMemory_(mem+y*#ImageWidth*SizeOf(_RGB),#ImageWidth*SizeOf(_RGB),y)
Next
; create image
image1 = CreateImage(1,#ImageWidth,#ImageHeight)
If image1
; copy memory array to image
Mem2Image(1,#ImageWidth,#ImageHeight,mem)
OpenWindow(0,0,0,ImageWidth(),ImageHeight(),#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"Image")
CreateGadgetList(WindowID())
ImageGadget(0,0,0,ImageWidth(),ImageHeight(),image1)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Else
MessageRequester("ERROR","Cant load image!",#MB_ICONERROR)
EndIf
Dabei solltest Du beachten das dieses Bild falschrum ist,
d.h. die erste Zeile im Bild ist im SpeicherArray die unterste
Zeile.
PB-Arrays kann man aber nicht einfach so als geradlinigen
Speicher ansprechen, da in PB x und y verkehrt herum sind.
Deshalb kann man PB-Arrays mit C oder mit WinAPI nicht
einfach nutzen.