http://msdn.microsoft.com/library/defau ... s_87eb.asp
Windows 95/98/Me: The created bitmap cannot exceed 16MB in size.
Windows 95/98/Me: The created bitmap cannot exceed 16MB in size.
Code: Alles auswählen
Structure PB_StructureImage
Bitmap.l
Width.w
Height.w
Depth.w
ColorArray.l
EndStructure
Structure BitmapInf
biSize.l
biWidth.l
biHeight.l
biPlanes.w
biBitCount.w
biCompression.l
biSizeImage.l
biXPelsPerMeter.l
biYPelsPerMeter.l
biClrUsed.l
biClrImportant.l
rgbBlue.b
rgbGreen.b
rgbRed.b
rgbReserved.b
EndStructure
Procedure IMAGE_GetOrAllocImageSpace(Number)
!EXTRN _PB_Image_GetOrAllocateID
!MOV EAX,[Esp]
!CALL _PB_Image_GetOrAllocateID
ProcedureReturn
EndProcedure
Procedure CreateImage_Test(Number,Width,Height,BitColor)
DC=CreateDC_("DISPLAY",#Null,#Null,#Null)
If GetObjectType_(DC)=0:ProcedureReturn 0:EndIf
bmp.BitmapInf
bmp\biSize=SizeOf(BITMAPINFOHEADER)
bmp\biWidth=Width
bmp\biHeight=Height
bmp\biPlanes=1
bmp\biBitCount=BitColor
bmp\biCompression=#BI_RGB
hBitmap=CreateDIBSection_(DC,bmp,#DIB_RGB_COLORS,@*ptr,0,0)
DeleteDC_(DC)
If GetObjectType_(hBitmap)=0:ProcedureReturn 0:EndIf
*ImgPtr.PB_StructureImage=IMAGE_GetOrAllocImageSpace(Number)
If *ImgPtr=0:ProcedureReturn 0:EndIf
If GetObjectType_(*ImgPtr\Bitmap):DeleteObject_(*ImgPtr\Bitmap):EndIf
GetObject_(hBitmap,SizeOf(BITMAP),BmpInf.BITMAP)
*ImgPtr\Bitmap=hBitmap
*ImgPtr\Width=BmpInf\bmWidth
*ImgPtr\Height=BmpInf\bmHeight
*ImgPtr\Depth=BmpInf\bmBitsPixel
*ImgPtr\ColorArray=0
If Number=#PB_Any
UseImage(*ImgPtr.PB_StructureImage)
ProcedureReturn *ImgPtr.PB_StructureImage
Else
UseImage(Number)
ProcedureReturn hBitmap
EndIf
EndProcedure
CreateImage_Test(1,8192,8192,24)
UsePNGImageEncoder()
SaveImage(1,"c:\test.png",#PB_ImagePlugin_PNG)
FreeImage(1)
If OpenWindow(0,0,0,300,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"ImageGadget") And CreateGadgetList(WindowID(0))
test=CreateImage_Test(#PB_Any,200,200,32)
If IsImage(test)
UseImage(test)
StartDrawing(ImageOutput())
For c=0 To 24
Circle(Random(400),Random(300),50,Random($FFFFFF))
Next
StopDrawing()
ImageGadget(1,10,10,200,200,ImageID(),#PB_Image_Border)
EndIf
EndIf
Exit=0
Size=3000
Repeat
If CreateImage_Test(1,Size,Size,32)
FreeImage(1)
Size+10
Debug Size
Else
Debug getlasterror_()
Exit=#True
EndIf
Until Exit
Debug "Erstellt bis: "+Str(Size)
Debug Str(Size*Size*4/1024/1204)+"MB" ;32Bit Color
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
Ich bin der Ansicht das PB da gefixt werden muss. Wofür sind die Befehle sonst da. Wenn sich solche Beschränkungen häufen würden, würde PB schlicht uninteressant.computerkranker hat geschrieben:@Sunny:
Wenn möglich wollte ich schon die normalen PB-Befehl benutzen. Was ja mit obigen Beispiel möglich ist. Es wäre nur noch eine Ersatzfunktion für LoadImage und CatchImage nötig.
Wenn Du natürlich ein Code(in PB) hast der alles mit DIB macht und das laden von JPG,PNG, TIFF unterstützt und Speichern natürlich auch. Der vor allem auch so was wie CatchImage hat. Na dann immer her.