Hi,
ich suche einen Befehl oder eine Möglichkeit den Transparenten Bereich, der von einem Bild umgeben ist abzuschneiden.
Es handelt sich um mehrere Bilder mit verschiedenen Auflösungen, z.B. 200x100 Pixel, in denen eine Grafik mit verschiedenen Auflösungen, z.B. 190x70 Pixel dargestellt wird.
Ich möchte den Bereich um den sichtbaren Teil entfernen um hier ein Bild mit 190x70 Pixel zu erhalten.
Welche Möglichkeiten bietet Purebasic?
Über kleine Beispiele würde ich mich freuen.
Danke und viele Grüße
Thomas
Transparente Bereiche um ein Bild abschneiden
Transparente Bereiche um ein Bild abschneiden
Win11 Pro
PureBasic 6.10 LTS
PureBasic 6.10 LTS
Re: Transparente Bereiche um ein Bild abschneiden
Hi Ara,
Ich hab das selbst noch nicht gemacht, aber ich würde links einmal von oben nach unten testen, ob alle Pixel transparent sind. Falls ja dann die zweite Reihe und so weiter bis das erste nicht transparente Pixel kommt. Dann von rechts, von oben und unten das gleiche. Anschließend entsprechend zuschneiden.
PureBasic bietet von Haus aus nichts in der Richtung, das musst du selbst programmieren. Ist aber nicht schwer, eher eine Fleißaufgabe.
Ich hab das selbst noch nicht gemacht, aber ich würde links einmal von oben nach unten testen, ob alle Pixel transparent sind. Falls ja dann die zweite Reihe und so weiter bis das erste nicht transparente Pixel kommt. Dann von rechts, von oben und unten das gleiche. Anschließend entsprechend zuschneiden.
PureBasic bietet von Haus aus nichts in der Richtung, das musst du selbst programmieren. Ist aber nicht schwer, eher eine Fleißaufgabe.
Guten Morgen, das ist ein schöner Tnetennba!
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Re: Transparente Bereiche um ein Bild abschneiden
@Ara:
ich hatte vor Jahren mal eine ähnliche Frage. Vielleicht ist unter den Antworten etwas Nützliches für Dich dabei: Weiße Bildränder wegschneiden
ich hatte vor Jahren mal eine ähnliche Frage. Vielleicht ist unter den Antworten etwas Nützliches für Dich dabei: Weiße Bildränder wegschneiden
a²+b²=mc²
Re: Transparente Bereiche um ein Bild abschneiden
Hab mal auf Anhieb sowas jetzt gebastelt, funktioniert aber nur mit einer durchsichtigen Farbe, ohne Alpha Kanal.
Code: Alles auswählen
; CropImage.pb
; ------------
; (c) 2023 by benubi
;;
;
; Remove image edges.
;
; Bildränder entfernen.
;
; Supprimer les bords de l'image.
;
;
Procedure CropImage( Image, NewImage, TransparentColor=-1)
Protected xmin, ymin, xmax, ymax
Protected x, y
Protected width, height
Protected t_result
If IsImage(Image) = #Null : ProcedureReturn #Null : EndIf
width = ImageWidth(Image)
height = ImageHeight(Image)
xmin = width
ymin = height
If StartDrawing(ImageOutput(Image))
If TransparentColor = -1
TransparentColor=Point(0,0)
EndIf
For y = 0 To height - 1
For x = 0 To width - 1
If TransparentColor<>Point(x,y)
If x>xmax
xmax=x
EndIf
If x<xmin
xmin=x
EndIf
If y>ymax
ymax=y
EndIf
If y<ymin
ymin=y
EndIf
EndIf
Next
Next
StopDrawing()
t_result = GrabImage(Image, NewImage, xmin, ymin, 1 + (xmax-xmin), 1 + (ymax-ymin))
EndIf
ProcedureReturn t_result
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
UsePNGImageDecoder()
UseGIFImageDecoder()
UseTGAImageDecoder()
UseJPEG2000ImageDecoder()
UseJPEGImageDecoder()
UseTIFFImageDecoder()
Define File$ = OpenFileRequester("Load file to crop","file_to_crop.pb","Image files|*.gif;*.png;*.bmp;*.tga;*.tiff;*.ico;*.jpg;*.jpeg|All files|*.*",0)
LoadImage(1, File$)
CropImage(1, 2)
OpenWindow(1,0,0,ImageWidth(1),ImageHeight(1),"Original image "+Str(ImageWidth(1))+"x"+Str(ImageHeight(1)),#PB_Window_SystemMenu)
ImageGadget(1,0,0,WindowWidth(1),WindowHeight(1), ImageID(1))
OpenWindow(2,0,0,ImageWidth(2),ImageHeight(2),"Cropped image "+Str(ImageWidth(2))+"x"+Str(ImageHeight(2)),#PB_Window_SystemMenu)
ImageGadget(2,0,0,WindowWidth(2),WindowHeight(2), ImageID(2))
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
Debug "Good bye."
End
CompilerEndIf