本文整理匯總了Golang中C.struct_jpeg_decompress_struct.raw_data_out方法的典型用法代碼示例。如果您正苦於以下問題:Golang struct_jpeg_decompress_struct.raw_data_out方法的具體用法?Golang struct_jpeg_decompress_struct.raw_data_out怎麽用?Golang struct_jpeg_decompress_struct.raw_data_out使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類C.struct_jpeg_decompress_struct
的用法示例。
在下文中一共展示了struct_jpeg_decompress_struct.raw_data_out方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: decodeGray
func decodeGray(dinfo *C.struct_jpeg_decompress_struct) (dest *image.Gray, err error) {
// output dawnsampled raw data before starting decompress
dinfo.raw_data_out = C.TRUE
C.jpeg_start_decompress(dinfo)
compInfo := (*[1]C.jpeg_component_info)(unsafe.Pointer(dinfo.comp_info))
dest = NewGrayAligned(image.Rect(0, 0, int(compInfo[0].downsampled_width), int(compInfo[0].downsampled_height)))
iMCURows := int(C.DCT_v_scaled_size(dinfo, C.int(0)) * compInfo[0].v_samp_factor)
C.decode_gray(dinfo, C.JSAMPROW(unsafe.Pointer(&dest.Pix[0])), C.int(dest.Stride), C.int(iMCURows))
C.jpeg_finish_decompress(dinfo)
return
}
示例2: decodeYCbCr
func decodeYCbCr(dinfo *C.struct_jpeg_decompress_struct) (dest *image.YCbCr, err error) {
// output dawnsampled raw data before starting decompress
dinfo.raw_data_out = C.TRUE
C.jpeg_start_decompress(dinfo)
compInfo := (*[3]C.jpeg_component_info)(unsafe.Pointer(dinfo.comp_info))
dwY := compInfo[Y].downsampled_width
dhY := compInfo[Y].downsampled_height
dwC := compInfo[Cb].downsampled_width
dhC := compInfo[Cb].downsampled_height
//fmt.Printf("%d %d %d %d\n", dwY, dhY, dwC, dhC)
if dwC != compInfo[Cr].downsampled_width || dhC != compInfo[Cr].downsampled_height {
return nil, errors.New("Unsupported color subsampling (Cb and Cr differ)")
}
// Since the decisions about which DCT size and subsampling mode
// to use, if any, are complex, instead just check the calculated
// output plane sizes and infer the subsampling mode from that.
var subsampleRatio image.YCbCrSubsampleRatio
colorVDiv := 1
switch {
case dwY == dwC && dhY == dhC:
subsampleRatio = image.YCbCrSubsampleRatio444
case dwY == dwC && (dhY+1)/2 == dhC:
subsampleRatio = image.YCbCrSubsampleRatio440
colorVDiv = 2
case (dwY+1)/2 == dwC && dhY == dhC:
subsampleRatio = image.YCbCrSubsampleRatio422
case (dwY+1)/2 == dwC && (dhY+1)/2 == dhC:
subsampleRatio = image.YCbCrSubsampleRatio420
colorVDiv = 2
default:
return nil, errors.New("Unsupported color subsampling")
}
// Allocate distination iamge
dest = NewYCbCrAligned(image.Rect(0, 0, int(dinfo.output_width), int(dinfo.output_height)), subsampleRatio)
var iMCURows int
for i := 0; i < int(dinfo.num_components); i++ {
compRows := int(C.DCT_v_scaled_size(dinfo, C.int(i)) * compInfo[i].v_samp_factor)
if compRows > iMCURows {
iMCURows = compRows
}
}
//fmt.Printf("iMCU_rows: %d (div: %d)\n", iMCURows, colorVDiv)
C.decode_ycbcr(dinfo,
C.JSAMPROW(unsafe.Pointer(&dest.Y[0])),
C.JSAMPROW(unsafe.Pointer(&dest.Cb[0])),
C.JSAMPROW(unsafe.Pointer(&dest.Cr[0])),
C.int(dest.YStride),
C.int(dest.CStride),
C.int(colorVDiv),
C.int(iMCURows),
)
C.jpeg_finish_decompress(dinfo)
return
}