Bitmapgröße ändern im Hintergrund
Moderator: Moderatoren
-
- Cut&Paste-Entwickler
- Beiträge: 37
- Registriert: Do, 19. Okt 2006 10:24
- Wohnort: St. Martin
Bitmapgröße ändern im Hintergrund
Ist es eigentlich möglich eine Graphikdatei (.jpg) im Hintergrund, also ohne sie in einem Dialog anzuzeigen, in der Größe zu verändern und dann
wieder in einer neuen Graphikdatei abzuspeichern ?
Gruss Manfred
wieder in einer neuen Graphikdatei abzuspeichern ?
Gruss Manfred
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo,
du kannst eine JPG mit XbpBitmap() laden und einem Presentationspace zuordnen, ohne dass dieser auf dem Bildschirm sichtbar sein muss.
Mit GraBitBlt() müssten darin nun Größenänderungen möglich sein.
Danach mit savefile() speichern.
Mit GraBitBlt() habe ich noch nicht gearbeitet.
Ich habe neue Grafiken erzeugt und gespeichert. Allerdings mit GIF, da PNG zu langsam war. BMP ist bei kleinen Sachen OK.
JPG hat bei mir zu ausgefranstem Text geführt (ich habe eine 16 Farben Grafik mit Text erstellt) - bei Bildern ist JPG bestimmt besser.
du kannst eine JPG mit XbpBitmap() laden und einem Presentationspace zuordnen, ohne dass dieser auf dem Bildschirm sichtbar sein muss.
Mit GraBitBlt() müssten darin nun Größenänderungen möglich sein.
Danach mit savefile() speichern.
Mit GraBitBlt() habe ich noch nicht gearbeitet.
Ich habe neue Grafiken erzeugt und gespeichert. Allerdings mit GIF, da PNG zu langsam war. BMP ist bei kleinen Sachen OK.
JPG hat bei mir zu ausgefranstem Text geführt (ich habe eine 16 Farben Grafik mit Text erstellt) - bei Bildern ist JPG bestimmt besser.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Bitmapgröße ändernim Hintergrund
hi,
von "verschiedenen" Formaten.
so nun hier 2 Möglichkeiten :
oder
gruss by OHR
Jimmy
grundsätzlich ja, aber es könnte bei JPG Probleme geben beim lesenmr@nline.de hat geschrieben: Ist es eigentlich möglich eine Graphikdatei (.jpg) im Hintergrund, also
ohne sie in einem Dialog anzuzeigen, in der Größe zu verändern und
dann wieder in einer neuen Graphikdatei abzuspeichern ?
von "verschiedenen" Formaten.
so nun hier 2 Möglichkeiten :
Code: Alles auswählen
FUNCTION ThumbNail(cFileName,aSize,nCompr)
LOCAL oPS2, oBMP1, oBMP2, cThumbName
//LOCAL oPS1
DEFAULT nCompr TO 0
cThumbName := left(cFileName,len(cFileName)-4)+"_thumb"+right(cFileName,4)
if file(cFileName) .and. !file(cThumbName)
oBMP1:= XbpBitmap():New():Create()
// Grafik Datei laden
oBMP1:LoadFile(cFileName)
if aSize == NIL
// Grösse feststellen
aSize := {oBMP1:xSize,oBMP1:ySize}
endif
oBMP2:= XbpBitmap():New():Create()
oPS2:= XbpPresSpace():New():Create()
// Presspace anfordern
oBMP2:PresSpace(oPS2)
// make aufrufen mit original :Planes und :bits
oBMP2:Make(aSize[1],aSize[2],oBMP1:Planes,oBMP1:Bits)
// altes Bild in neues zeichnen
oBMP1:Draw(oPS2,{0,0,aSize[1],aSize[2]},,,3)
// sichern der neuen Datei als JPG
oBMP2:SaveFile(cThumbName,XBPBMP_FORMAT_JPG,nCompr)
oPS2:Destroy()
oBMP1:Destroy()
oBMP2:Destroy()
endif
Code: Alles auswählen
if file(cFileName) .and. !file(cThumbName)
oBMP1:= XbpBitmap():New():Create()
oPS1:= XbpPresSpace():New():Create()
oBMP1:PresSpace(oPS1)
oBMP1:LoadFile(cFileName)
if aSize == NIL
aSize := {oBMP1:xSize,oBMP1:ySize}
endif
// "male" Bild in Presspace
oBMP1:Draw(oPS1,{0,0,oBMP1:xSize,oBMP1:ySize})
oBMP2:= XbpBitmap():New():Create()
oPS2:= XbpPresSpace():New():Create()
oBMP2:PresSpace(oPS2)
oBMP2:Make(aSize[1],aSize[2],oBMP1:Planes,oBMP1:Bits)
// transfomiere mittels GraBitBlt
GraBitBlt(oPS2,oPS1,{0,0,aSize[1],aSize[2]}, {0,0,oBMP1:xSize,oBMP1:ySize},,3
)
oBMP2:SaveFile(cThumbName,XBPBMP_FORMAT_JPG,nCompr)
oPS1:Destroy()
oPS2:Destroy()
oBMP1:Destroy()
oBMP2:Destroy()
endif
RETURN cThumbName
Jimmy
-
- Cut&Paste-Entwickler
- Beiträge: 37
- Registriert: Do, 19. Okt 2006 10:24
- Wohnort: St. Martin
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
das Problem ist bekannt - ein "fehlerhafter" (proprietärer) Header, der durch entsprechende (Scanner-)Software so erzeugt wird!
Einfach die Datei mit einem Grafikprogramm öffnen und speichern - dabei wird im Allgemeinen der Header korrigiert. Es gibt auch einen PDR dazu, in dem dieses Vorgehen als Workaround beschrieben wird.
Viele Grüße,
Martin
das Problem ist bekannt - ein "fehlerhafter" (proprietärer) Header, der durch entsprechende (Scanner-)Software so erzeugt wird!
Einfach die Datei mit einem Grafikprogramm öffnen und speichern - dabei wird im Allgemeinen der Header korrigiert. Es gibt auch einen PDR dazu, in dem dieses Vorgehen als Workaround beschrieben wird.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
-
- Cut&Paste-Entwickler
- Beiträge: 37
- Registriert: Do, 19. Okt 2006 10:24
- Wohnort: St. Martin
-
- Cut&Paste-Entwickler
- Beiträge: 37
- Registriert: Do, 19. Okt 2006 10:24
- Wohnort: St. Martin
Hallo Tom,
Zur Konvertierung der Bilder kann man natürlich auch den
"Windows scripting Host" einsetzen, und z.B. einfach mspaint
fernsteuern.
Hier ein Beispiel Dateiname="Bilder.vbs"
Gruss
Manfred
Zur Konvertierung der Bilder kann man natürlich auch den
"Windows scripting Host" einsetzen, und z.B. einfach mspaint
fernsteuern.
Hier ein Beispiel Dateiname="Bilder.vbs"
Code: Alles auswählen
set wshshell = Createobject("WScript.Shell")
set fs = CreateObject("Scripting.FileSystemObject")
set ordner = fs.GetFolder("m:\temp\bilder")
wshshell.Run "mspaint.exe"
wScript.Sleep 5000
for each datei in ordner.files
wshshell.SendKeys("^o")
wshshell.SendKeys("m:\temp\bilder\"+datei.name)
wscript.Sleep 250
wshshell.SendKeys("{ENTER}")
wscript.Sleep 250
wshshell.SendKeys("^s")
wscript.Sleep 1000
next
wshshell.SendKeys("%{F4}")
Gruss
Manfred