ImageEncoder für TIFF bzw. TGA?

Anfängerfragen zum Programmieren mit PureBasic.
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

ImageEncoder für TIFF bzw. TGA?

Beitrag von Tompazi »

Ich habe gerade ein kleinen "Foto Verkleinerer" geschrieben er unterstützt
jpg, jpeg, jpe, png, und bmp und ich würde auch gerne TGA und TIFF (und auch andere Bildformate) unterstützen aber es gibt diese zwei Befehle (UseTGAImageEncoder(), UseTIFFImageEncoder()) leider nicht.
Gibt es da eine Alternative (wie z.B. Userlib) oder muss ich einfach warten bis bei einer neuen PureBasic Version so ein Encoder enthalten ist?

Und kann ich ein Bild mit Alphachannel vergrößern/-kleinern (wieso gibt es den Befehl ResizeAplhaImage() nicht? :evil: )

Falls mal wer was ähnliches basteln will, hier mal mein Code (Verbesserungsvorschläge sind erwünscht):

Code: Alles auswählen

;; 21 Juli 2008 von Tompazi

If OpenWindow(0,0,0,120,250,"Foto Verkleinerer",#PB_Window_MinimizeGadget | #PB_Window_ScreenCentered )
 
 CreateGadgetList(WindowID(0))
  CreateToolBar(0,WindowID(0))
   ToolBarStandardButton(0, #PB_ToolBarIcon_Open)
   ToolBarToolTip(0, 0, "Foto laden")
  ButtonGadget  (1,10,220,100,20,"Verkleinern")
  CheckBoxGadget(3, 10,  30, 100, 20, "Kanten Glätten")
   SetGadgetState(3,1)
  TextGadget    (4, 10, 60, 100, 40,"Qualität (nur JPG, JPE und JPEG)", #PB_Text_Center)
  TrackBarGadget(5,10,100,100,20,0,10,#PB_TrackBar_Ticks)
   SetGadgetState(5,10)
  TextGadget    (6, 10, 120, 100, 20,Str(Qualitaet), #PB_Text_Center)
  TextGadget    (7, 10, 150, 100, 20,"Verkleinerung", #PB_Text_Center)
  TrackBarGadget(8,10,170,100,20,1,100)
   SetGadgetState(8,50)
  TextGadget    (9, 10, 190, 100, 20,Str(Verkleinerung) + "%", #PB_Text_Center)
 
 UseJPEGImageDecoder()
 UseTGAImageDecoder()
 UsePNGImageDecoder()
 UseTIFFImageDecoder()
 UseJPEGImageEncoder()
 UsePNGImageEncoder()

 Repeat
  
  Kanten = GetGadgetState(3)
  Qualitaet = GetGadgetState(5)
  Verkleinerung = GetGadgetState(8)
  SetGadgetText(6,Str(Qualitaet))
  SetGadgetText(9,Str(Verkleinerung) + "%")
  Event = WaitWindowEvent()
  
  Select Event
   
   Case #PB_Event_Menu
   
    Select EventMenu()
   
     Case 0
   
      Foto$ = OpenFileRequester("Wähle ein Foto:","%USERPROFILE%\Pictures\","Fotos (*.jpg ; *.jpeg; *.jpe; *.bmp ; *.png ; *.tga ; *.tiff ; *.tif) |*.jpeg;*.jpg;*.jpe;*.bmp;*.png;*.tga;*.tiff;*.tif",0)
   
      If Foto$
      
       LoadImage(0,Foto$)
   
      EndIf
   
    EndSelect
   
   Case #PB_Event_Gadget
   
     Select EventGadget()
   
      Case 1
   
       If Foto$
   
        Breite.w = ImageWidth(0) / (100 / Verkleinerung)
        Hoehe.w = ImageHeight(0) / (100 / Verkleinerung)
   
        If Kanten = 1
         ResizeImage(0,Breite.w, Hoehe.w)
        ElseIf Kanten = 0
         ResizeImage(0,Breite.w, Hoehe.w, #PB_Image_Raw)
        EndIf
   
        Speichern$ = SaveFileRequester("Verkleinertes Foto Speichern..",Foto$,"Fotos (*.jpg ; *.jpeg; *.jpe ; *.bmp ; *.png) |*.jpeg;*.jpg;*.jpe;*.bmp;*.png",0)
       
        If Speichern$
       
         Endung$ = GetExtensionPart(Speichern$)
       
         If Endung$ = "JPG" Or Endung$ = "JPEG" Or Endung$ = "jpg" Or Endung$ = "jpeg" Or Endung$ = "JPE" Or Endung$ = "jpe"
          SaveImage(0,Speichern$,#PB_ImagePlugin_JPEG,Qualitaet)
         ElseIf Endung$ = "png"Or Endung$ = "PNG"
          SaveImage(0,Speichern$,#PB_ImagePlugin_PNG)
         Else
          SaveImage(0,Speichern$,#PB_ImagePlugin_BMP)
         EndIf
       
        EndIf
       
       EndIf
     
     EndSelect
  
  EndSelect
 
 Until Event = #PB_Event_CloseWindow

EndIf
MfG Tompazi
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Im englischem Forum findeste wrapper für FreeImage, damit haste das
alles zur Verfügung. In PB werden so spezielle Dinge wohl eher nicht nativ
umgesetzt werden.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Beitrag von Tompazi »

Danke,
habe mir den FreeImage Wrapper heruntergeladen mein Programm kann aber diese
IncludeFile "FreeImage_Res.pb"
IncludeFile "FreeImage_Inc.pb"
Datein nicht finden obwohl der Code im gleichen Ordner wie diese beiden Dateien gespeichert sind gespeichert ist.

MfG Tompazi
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ohne link, welche Version Du nun geladen hast, kann ich dazu schlecht was
sagen, ich selber habe den Source nicht geladen, da ich das nicht benötige,
mir reicht es mal ein Bild oder Icon zu laden :wink: (bisher)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Ich selber habe schon einen TGA Loader und Writer geschrieben und benutze die auch häufig, allerdings nur für 24/32 bit TGAs die nicht mit RLE komprimiert sind. Ich bin gerade auf'm Arbeitsplatz (Praktikum) deshalb kann ich da nichts posten.

Targa Image File Format ist auch relativ simpel, wenn man sich die Headerdaten aus Wikipedia anschaut, das in Kombi mit einem Code aus dem CodeArchiv.
Antworten