PNGHeader.bmx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. Strict
  2. Import BRL.Stream
  3. Import BRL.EndianStream
  4. Type PNGHeader
  5. Field signiture:String
  6. Field chunksize:Int
  7. Field chunkID:String
  8. Field width:Int
  9. Field height:Int
  10. Global PNG_ID:String = Chr($89) + Chr($50) + Chr($4E) + Chr($47) + Chr($0D) + Chr($0A) + Chr($1A) + Chr($0A)
  11. Function fromFile:PNGHeader( url:Object )
  12. Local myStream:TStream = ReadStream( url )
  13. Local temp:PNGHeader
  14. If StreamSize (myStream) > 24
  15. temp = New PNGHeader
  16. Local eStream:TStream = BigEndianStream(myStream)
  17. temp.signiture = ReadString (eStream , 8)
  18. temp.chunksize = Readint (eStream)
  19. temp.chunkID = ReadString (eStream , 4)
  20. temp.width = Readint (eStream)
  21. temp.height = Readint (eStream)
  22. CloseStream eStream
  23. EndIf
  24. CloseStream myStream
  25. Return temp
  26. EndFunction
  27. Function fromPtr:PNGHeader( Pointer:Byte Ptr )
  28. Local temp:PNGHeader = New PNGHeader
  29. temp.signiture = Chr(Pointer[0]) + Chr(Pointer[1]) + Chr(Pointer[2]) + Chr(Pointer[3]) + Chr(Pointer[4]) + Chr(Pointer[5]) + Chr(Pointer[6]) + Chr(Pointer[7])
  30. temp.chunksize = Pointer[8] Shl 24 | Pointer[9] Shl 16 | Pointer[10] Shl 8 | Pointer[11]
  31. temp.chunkID = Chr(Pointer[12]) + Chr(Pointer[13]) + Chr(Pointer[14]) + Chr(Pointer[15])
  32. temp.width = Pointer[16] Shl 24 | Pointer[17] Shl 16 | Pointer[18] Shl 8 | Pointer[19]
  33. temp.height = Pointer[20] Shl 24 | Pointer[21] Shl 16 | Pointer[22] Shl 8 | Pointer[23]
  34. Return temp
  35. EndFunction
  36. Method isPNG:Int()
  37. If signiture = PNG_ID
  38. Return True
  39. EndIf
  40. Return False
  41. EndMethod
  42. Method toString:String()
  43. Local temp:String = "isPng: "
  44. If isPNG()
  45. temp:+"True "
  46. Else
  47. temp:+"False "
  48. EndIf
  49. temp:+"Width: " + width + " Height: " + height
  50. Return temp
  51. EndMethod
  52. EndType