NIF - 3 Bit Grayscale Image Library

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

NIF - 3 Bit Grayscale Image Library

Beitrag von Mijikai »

NIF - 3 Bit Grayscale Image Library

Bild

Eine kleine Library für Bilder mit 3 Bit Graustufen
mit oder ohne Alpha-Channel :)

Alle Bilder können als 'NIF-Image' abgespeichert werden.

Beispiel:

Code: Alles auswählen

EnableExplicit

Import "nif.lib"
  nifLoad.i(File.s);<- load nif/bmp images
  nifCatch.i(*Buffer,BufferSize.i);<- catch nif/bmp images
  nifConvert.i(*Handle);<- convert img to nif
  nifWidth(*NIF);<- get nif width
  nifHeight(*NIF);<- get nif height
  nifAlpha(*NIF);<- has alpha channel?
  nifHandle.i(*NIF);<- get handle
  nifSave.i(*NIF,File.s,Bitmap.i = #False);<- save nif/bmp
  nifFree.i(*NIF);<- free nif
  nifVersion.i();<- version info
EndImport

UsePNGImageDecoder();<- nif only supports bmp/nif files - use image plugins!
UseJPEGImageDecoder()

Global nifImage1.i
Global nifImage2.i
Global nifImage3.i

Procedure.i DownloadAndConvertImage(Url.s);<- download and convert example images
  Protected *Buffer
  Protected Image.i
  Protected Result.i
  *Buffer = ReceiveHTTPMemory(Url)
  If *Buffer
    Image = CatchImage(#PB_Any,*Buffer,MemorySize(*Buffer))
    If Image
      Result = nifConvert(ImageID(Image))
      FreeImage(Image)
    EndIf 
    FreeMemory(*Buffer)
  EndIf
  ProcedureReturn Result
EndProcedure

If InitNetwork()
  nifImage1 = DownloadAndConvertImage("https://upload.wikimedia.org/wikipedia/commons/4/4f/Orion_Belt.jpg")
  If nifImage1
    nifImage2 = DownloadAndConvertImage("https://www.purebasic.fr/english/styles/subsilverPlus/imageset/purebasic_logo.png")
    If nifImage2
      nifImage3 = DownloadAndConvertImage("https://upload.wikimedia.org/wikipedia/commons/6/6a/Sputnik-stamp-ussr.jpg")
      If nifImage3
        Debug nifSave(nifImage1,"nifImage1.nif");<- save nif image (compare sizes!)
        If OpenWindow(0,0,0,400,200,"NIF-Image (3 Bit Grayscale Image Library) Demo!",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
          If StartVectorDrawing(WindowVectorOutput(0))
            MovePathCursor(0,0)
            DrawVectorImage(nifHandle(nifImage1),$FF,400,200)
            MovePathCursor(60,150)
            RotateCoordinates(60,150,-20)
            DrawVectorImage(nifHandle(nifImage2),$AA)
            MovePathCursor(100,20)
            RotateCoordinates(100,20,50)
            DrawVectorImage(nifHandle(nifImage3),$AA,50,80)
            StopVectorDrawing()
          EndIf
          Repeat
          Until WaitWindowEvent() = #PB_Event_CloseWindow
          CloseWindow(0)
        EndIf
        nifFree(nifImage3)
      EndIf
      nifFree(nifImage2)
    EndIf
    nifFree(nifImage1)
  EndIf
EndIf

End
Download (Binary):
https://www.dropbox.com/s/t2mzhat88uqzb ... a.zip?dl=0

Viel Spass beim testen :D
Fragen sind wie immer Willkommen
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: NIF - 3 Bit Grayscale Image Library

Beitrag von DarkSoul »

Dein Beispiel sürzt bei mir in Zeile 31, NifConvert(), mit "Invalid Memory Access" ab (das Bild, das als Eingabeparameter übergeben wird, ist in Ordnung). :wink:

Versuchte PB-Version ist 5.62 x64.

Was ist denn der Vorteil gegenüber normalem PNG (außer dass die Umwandlung auf 4/8Bit vielleicht besser funktioniert als mit der Image-Lib, die bei PB dabei ist)?
Bild
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: NIF - 3 Bit Grayscale Image Library

Beitrag von Mijikai »

DarkSoul hat geschrieben:Dein Beispiel sürzt bei mir in Zeile 31, NifConvert(), mit "Invalid Memory Access" ab (das Bild, das als Eingabeparameter übergeben wird, ist in Ordnung). :wink:

Versuchte PB-Version ist 5.62 x64.

Was ist denn der Vorteil gegenüber normalem PNG (außer dass die Umwandlung auf 4/8Bit vielleicht besser funktioniert als mit der Image-Lib, die bei PB dabei ist)?
Danke fürs testen :)
Ich versuche ein eigenes Bildformat zu entwickeln.
Das Ziel: kleine Dateien, wenig Code und vor allem keine 3rd Party Bloatware.
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: NIF - 3 Bit Grayscale Image Library

Beitrag von DarkSoul »

Wenn das das einzige Ziel ist: Du weißt, dass PB Decoder und Encoder für PNG eingebaut hat? :wink:

Code: Alles auswählen

UsePNGImageDecoder()
UsePNGImageEncoder()
Das ist alles.

Einfach irgendwo am Anfang einbauen und schon hast du PNG-Support. Macht deine kompilierte Binary vielleicht um ca. 200kB dicker....

Nix mit "Third Party Bloatware". :allright:

PNG komprimiert ungeditherte 8-Farben-Grafiken übrigens sehr gut.
Dies wäre dein "Gegner", gegen den du dein Format vergleichen müsstest. Ungedithert und gedithert natürlich. <)
Bild
Antworten