Ist das ab und zu vorkommende Problem hier und da bekannt?
Inc.
ResizeImage() "beschneidet" anstatt zu resizen.
- freedimension
- Admin
- Beiträge: 1987
- Registriert: 08.09.2004 13:19
- Wohnort: Ludwigsburg
- Kontaktdaten:
Danke 
Ausgangsbasis sind reine RGB24 Bilddaten geholt via getRGBFrame(input_frame) an den pointer *rgb24.
getRGBFrame() ist ein Functioncall an die DgDecode.dll welche mpeg2 sources dekodiert und via getRGBFrame() als Bildschirmdarstellbare RGB24 Daten wiedergibt.
Bild lässt sich anstandslos darstellen, nur ... wenns eben eine HDTV Source ist (1280 oder 1920) dann wird via der ResizeImage() Routine lediglich gecropped.
Funktioniert ResizeImage() nur mit RGB32 Daten?
Ausgangsbasis sind reine RGB24 Bilddaten geholt via getRGBFrame(input_frame) an den pointer *rgb24.
getRGBFrame() ist ein Functioncall an die DgDecode.dll welche mpeg2 sources dekodiert und via getRGBFrame() als Bildschirmdarstellbare RGB24 Daten wiedergibt.
Bild lässt sich anstandslos darstellen, nur ... wenns eben eine HDTV Source ist (1280 oder 1920) dann wird via der ResizeImage() Routine lediglich gecropped.
Code: Alles auswählen
Procedure DisplayFrame(input_frame.l, input_imagehdl.l)
Structure myBITMAPINFO
bmiHeader.BITMAPINFOHEADER
bmiColors.RGBQUAD[1]
EndStructure
Global bmi.myBITMAPINFO, hBmp, ImgID2 , no
Protected bmi.myBITMAPINFO , input_imagehdl;, hBmp
If source_width
If d2v = #True ;// Displaying a d2v file
bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi\bmiHeader\biWidth = source_width
bmi\bmiHeader\biHeight = -source_height ; Flip the RGB Image vertically!
bmi\bmiHeader\biPlanes = 1
bmi\bmiHeader\biBitCount = 24
bmi\bmiHeader\biCompression = #BI_RGB
*rgb24 = getRGBFrame(input_frame)
If *rgb24
hBmp = UseImage(videobmp)
hdc = StartDrawing(ImageOutput())
SetDIBits_(hdc, hBmp, 0, source_height, *rgb24, bmi, #DIB_RGB_COLORS)
StopDrawing()
SetGadgetState(input_imagehdl.l, hBmp)
Else
MessageRequester("Error!","No d2v RGB Imagedata could be received!",0)
ProcedureReturn #False
EndIf
ElseIf avi = #True ;// Displaying an avi file
*bih.BITMAPINFOHEADER = CallFunction(#Libavi, "AVIStreamGetFrame", pGetFrameObj, input_frame )
If *bih
hBmp = UseImage(videobmp)
hdc = StartDrawing(ImageOutput())
SetDIBits_(hdc, hBmp, 0, source_height, *bih + SizeOf(BITMAPINFOHEADER), *bih, #DIB_RGB_COLORS)
StopDrawing()
If source_width = 1280 Or source_width = 1920
hBmp = ResizeImage(videobmp, 720, 432)
EndIf
SetGadgetState(input_imagehdl.l, hBmp)
Else
MessageRequester("Error!","No avi imagedata could be received!",0)
ProcedureReturn #False
EndIf
EndIf
Else
MessageRequester("Error!","The Videodata in the Source contains NO width!?",0)
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure- sharkpeter
- Beiträge: 474
- Registriert: 29.08.2004 16:18
- Wohnort: Dresden
- Kontaktdaten:
Zuletzt geändert von sharkpeter am 03.02.2013 16:41, insgesamt 1-mal geändert.
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64
Nichts wissen macht nichts, sich dumm stellen aber schon.
Nichts wissen macht nichts, sich dumm stellen aber schon.
Kann es sein, dass dieser Fehler nur mit RGB24 Bildmaterial vorkommt?
Habe dieser Tage wegen was Anderem mal in der Windows SDK rumgesucht und nebenbei scheinen die Grafikroutinen gerne mit RGB32 Daten vorlieb zu nehmen, da (imho) DWORD aligned, was eben ...
Structure RGB32
blue.b
green.b
red.b
alpha.b
Endstructure
... entspräche.
RGB24 ist ja so im Speicher angelegt:
Structure RGB24
blue.b
green.b
red.b
Endstructure
Nehmen wir mal an, ich habe reine RGB24 Bild-Daten mit einer Breite von 200 und einer Höhe von 100, wie bekomme ich die zu rgb24, also hinter den originalen 3 bytes noch ein "alpha"-dummy byte hinten dran?
Habe dieser Tage wegen was Anderem mal in der Windows SDK rumgesucht und nebenbei scheinen die Grafikroutinen gerne mit RGB32 Daten vorlieb zu nehmen, da (imho) DWORD aligned, was eben ...
Structure RGB32
blue.b
green.b
red.b
alpha.b
Endstructure
... entspräche.
RGB24 ist ja so im Speicher angelegt:
Structure RGB24
blue.b
green.b
red.b
Endstructure
Nehmen wir mal an, ich habe reine RGB24 Bild-Daten mit einer Breite von 200 und einer Höhe von 100, wie bekomme ich die zu rgb24, also hinter den originalen 3 bytes noch ein "alpha"-dummy byte hinten dran?
