亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? details

?? linux下電話本所依賴的一些圖形庫
??
字號:
General ideas of Pixops======================= - Gain speed by special-casing the common case, and using   generic code to handle the uncommon case. - Most of the time in scaling an image is in the center;   however code that can handle edges properly is slow   because it needs to deal with the possibility of running   off the edge. So make the fast case code only handle   the centers, and use generic, slow, code for the edges,Structure of Pixops===================The code of pixops can roughly be grouped into four parts: - Filter computation functions - Functions for scaling or compositing lines and pixels   using precomputed filters - pixops process, the central driver that iterates through   the image calling pixel or line functions as necessary    - Wrapper functions (pixops_scale/composite/composite_color)   that compute the filter, chooses the line and pixel functions   and then call pixops_processs with the filter, line,   and pixel functions.pixops process is a pretty scary looking function:static voidpixops_process (guchar         *dest_buf,		int             render_x0,		int             render_y0,		int             render_x1,		int             render_y1,		int             dest_rowstride,		int             dest_channels,		gboolean        dest_has_alpha,		const guchar   *src_buf,		int             src_width,		int             src_height,		int             src_rowstride,		int             src_channels,		gboolean        src_has_alpha,		double          scale_x,		double          scale_y,		int             check_x,		int             check_y,		int             check_size,		guint32         color1,		guint32         color2,		PixopsFilter   *filter,		PixopsLineFunc  line_func,		PixopsPixelFunc pixel_func)(Some of the arguments should be moved into structures. It's basically"all the arguments to pixops_composite_color plus three more") Thearguments can be divided up into:Information about the destination buffer   guchar *dest_buf, int dest_rowstride, int dest_channels, gboolean dest_has_alpha,Information about the source buffer   guchar *src_buf,  int src_rowstride,  int src_channels,  gboolean src_has_alpha,   int src_width, int src_height,Information on how to scale the source buf and the region of the scaled sourceto render onto the destination buffer   int render_x0, int render_y0, int render_x1, int render_y1   double scale_x, double scale_yInformation about a constant color or check pattern onto which to to composite   int check_x,	int check_y, int check_size, guint32 color1, guint32 color2Information precomputed to use during the scale operation   PixopsFilter *filter, PixopsLineFunc line_func, OixopsPixelFunc pixel_funcFilter computation==================The PixopsFilter structure looks like:struct _PixopsFilter{  int *weights;  int n_x;  int n_y;  double x_offset;  double y_offset;}; 'weights' is an array of size: weights[SUBSAMPLE][SUBSAMPLE][n_x][n_y]SUBSAMPLE is a constant - currently 16 in pixops.c.In order to compute a scaled destination pixel we convolvean array of n_x by n_y source pixels with one ofthe SUBSAMPLE * SUBSAMPLE filter matrices storedin weights. The choice of filter matrix is determinedby the fractional part of the source location.To compute dest[i,j] we do the following: x = i * scale_x + x_offset; y = i * scale_x + y_offset; x_int = floor(x) y_int = floor(y) C = weights[SUBSAMPLE*(x - x_int)][SUBSAMPLE*(y - y_int)] total  = sum[l=0..n_x-1, j=0..n_y-1] (C[l,m] * src[x_int + l, x_int + m])The filter weights are integers scaled so that the total of theweights in the weights array is equal to 65536.When the source does not have alpha, we simply compute each channelas above, so total is in the range [0,255*65536] dest = src / 65536When the source does have alpha, then we need to compute using"pre-multiplied alpha": a_total = sum (C[l,m] * src_a[x_int + l, x_int + m]) c_total = sum (C[l,m] * src_a[x_int + l, x_int + m] * src_c[x_int + l, x_int + m]) This gives us a result for c_total in the range of [0,255*a_total]  c_dest = c_total / a_total Mathematical aside:The process of producing a destination filter consistsof: - Producing a continuous approximation to the source   image via interpolation.  - Sampling that continuous approximation with filter.This is representable as: S(x,y) = sum[i=-inf,inf; j=-inf,inf] A(frac(x),frac(y))[i,j] * S[floor(x)+i,floor(y)+j] D[i,j] = Integral(s=-inf,inf; t=-inf,inf) B(i+x,j+y) S((i+x)/scale_x,(i+y)/scale_y) By reordering the sums and integrals, you get something of the form: D[i,j] = sum[l=-inf,inf; m=-inf;inf] C[l,m] S[i+l,j+l]The arrays in weights are the C[l,m] above, and are thusdetermined by the interpolating algorithm in use and thesampling filter:                                       INTERPOLATE       SAMPLE ART_FILTER_NEAREST                nearest neighbour     point ART_FILTER_TILES                  nearest neighbour      box ART_FILTER_BILINEAR (scale < 1)   nearest neighbour      box   (scale < 1) ART_FILTER_BILINEAR (scale > 1)       bilinear           point  (scale > 1) ART_FILTER_HYPER                      bilinear           box Pixel Functions===============typedef void (*PixopsPixelFunc) (guchar *dest, int dest_x, int dest_channels, int dest_has_alpha,				 int src_has_alpha,                                  int check_size, guint32 color1, guint32 color2,				 int r, int g, int b, int a);The arguments here are: dest: location to store the output pixel dest_x: x coordinate of destination (for handling checks) dest_has_alpha, dest_channels: Information about the destination pixbuf src_has_alpha: Information about the source pixbuf check_size, color1, color2: Information for color background for composite_color variant  r,g,b,a - scaled red, green, blue and alphar,g,b are premultiplied alpha. a is in [0,65536*255] r is in [0,255*a] g is in [0,255*a] b is in [0,255*a]If src_has_alpha is false, then a will be 65536*255, allowing optimization.Line functions==============typedef guchar *(*PixopsLineFunc) (int *weights, int n_x, int n_y,				   guchar *dest, int dest_x, guchar *dest_end, int dest_channels, int dest_has_alpha,				   guchar **src, int src_channels, gboolean src_has_alpha,				   int x_init, int x_step, int src_width,				   int check_size, guint32 color1, guint32 color2);The argumets are: weights, n_x, n_y   Filter weights for this row - dimensions weights[SUBSAMPLE][n_x][n_y] dest, dest_x, dest_end, dest_channels, dest_has_alpha   The destination buffer, function will start writing into *dest and   increment by dest_channels, until dest == dest_end. Reading from   src for these pixels is guaranteed not to go outside of the    bufer bounds src, src_channels, src_has_alpha    src[n_y] - an array of pointers to the start of the source rows   for each filter coordinate. x_init, x_step   Information about x positions in source image. src_width - unused check_size, color1, color2: Information for color background for composite_color variant The total for the destination pixel at dest + i is given by   SUM (l=0..n_x - 1, m=0..n_y - 1)      src[m][(x_init + i * x_step)>> SCALE_SHIFT + l] * weights[m][l]Algorithms for compositing==========================Compositing alpha on non alpha: R = As * Rs + (1 - As) * Rd G = As * Gs + (1 - As) * Gd B = As * Bs + (1 - As) * BdThis can be regrouped as: Cd + Cs * (Cs - Rd)Compositing alpha on alpha: A = As + (1 - As) * Ad R = (As * Rs + (1 - As) * Rd * Ad)  / A G = (As * Gs + (1 - As) * Gd * Ad)  / A B = (As * Bs + (1 - As) * Bd * Ad)  / AThe way to think of this is in terms of the "area":The final pixel is composed of area As of the source pixeland (1 - As) * Ad of the target pixel. So the final pixelis a weighted average with those weights.Note that the weights do not add up to one - hence thenon-constant division.Integer tricks for compositing==============================MMX Code========Line functions are provided in MMX functionsfor a few special cases: n_x = n_y = 2   src_channels = 3 dest_channels = 3    op = scale   src_channels = 4 with alpha dest_channels = 4 no alpha  op = composite   src_channels = 4 with alpha dest_channels = 4 no alpha  op = composite_colorFor the case n_x = n_y = 2 - primarily hit when scaling up with bilinearscaling, we can take advantage of the fact that multiple destinationpixels will be composed from the same source pixels.That is a destination pixel is a linear combination of the sourcepixels around it:  S0                     S1       D  D' D'' ...  S2                     S3Each mmx register is 64 bits wide, so we can unpack a source pixelinto the low 8 bits of 4 16 bit words, and store it into a mmx register.For each destination pixel, we first make sure that we have pixels S0... S3 loaded into registers mm0 ...mm3. (This will often involve notdoing anything or moving mm1 and mm3 into mm0 and mm1 then reloadingmm1 and mm3 with new values).Then we load up the appropriate weights for the 4 corner pixelsbased on the offsets of the destination pixel within the sourcepixels.We have preexpanded the weights to 64 bits wide and truncated therange to 8 bits, so an original filter value of  0x5321 would be expanded to 0x0053005300530053For source buffers without alpha, we simply do a multiply-addof the weights, giving us a 16 bit quantity for the resultthat we shift left by 8 and store in the destination buffer.When the source buffer has alpha, then things become morecomplicated - when we load up mm0 and mm3, we premultiplythe alpha, so they contain: (a*ff >> 8) (r*a >> 8) (g*a >> 8) (b*a >> a)Then when we multiply by the weights, and add we end upwith premultiplied r,g,b,a in the range of 0 .. 0xff * 0ff,call them A,R,G,BWe then need to composite with the dest pixels - which we do by: r_dest = (R + ((0xff * 0xff - A) >> 8) * r_dest) >> 8(0xff * 0xff) 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频在线不卡| av在线播放一区二区三区| 国产在线视频一区二区三区| 99精品桃花视频在线观看| 在线视频欧美区| 国产欧美一区二区在线观看| 日韩精品亚洲专区| 不卡欧美aaaaa| 2023国产精华国产精品| 一区二区三区蜜桃| 成人激情免费视频| 久久在线观看免费| 日韩精品亚洲专区| 欧美视频一区在线观看| 国产精品对白交换视频| 国产盗摄一区二区三区| 欧美一区二区女人| 图片区小说区区亚洲影院| 91影院在线免费观看| 欧美国产综合色视频| 国产一区激情在线| 欧美精品一区二区三区四区| 午夜电影网亚洲视频| 在线免费亚洲电影| 亚洲愉拍自拍另类高清精品| 99久久国产免费看| 中文字幕永久在线不卡| 国产成人av电影在线观看| 久久亚区不卡日本| 国产老女人精品毛片久久| 欧美mv日韩mv国产网站| 日韩成人精品在线观看| 91精品国产高清一区二区三区蜜臀 | 亚洲色欲色欲www在线观看| 一区二区三区在线观看视频 | 亚洲v日本v欧美v久久精品| 欧美电影免费观看高清完整版在| 91精品国产麻豆| 色噜噜夜夜夜综合网| 国产·精品毛片| 99久久精品免费看| 日韩欧美久久久| 青青草视频一区| 日韩一区二区三区在线观看| 美日韩一区二区| 久久亚洲一级片| av成人免费在线观看| 亚洲蜜臀av乱码久久精品蜜桃| 色天使久久综合网天天| 视频在线观看91| 亚洲精品一区二区三区精华液| 国产传媒日韩欧美成人| 国产精品污网站| 在线观看av一区二区| 蜜桃视频免费观看一区| 久久综合99re88久久爱| 成人精品高清在线| 亚洲国产综合人成综合网站| 911精品国产一区二区在线| 蜜桃在线一区二区三区| 国产色91在线| 在线观看日产精品| 精品一区二区三区香蕉蜜桃| 中文字幕av资源一区| 在线免费观看成人短视频| 日本不卡视频在线| 国产欧美精品在线观看| 色婷婷久久久久swag精品 | 青草av.久久免费一区| 国产视频911| 欧美日韩在线免费视频| 激情综合网天天干| 一区二区三区国产豹纹内裤在线| 欧美一级欧美一级在线播放| 成人综合在线网站| 日韩成人一级片| 亚洲欧洲韩国日本视频| 日韩精品一区二区在线| 91丝袜国产在线播放| 蜜臀av一区二区在线免费观看| 国产精品日产欧美久久久久| 777亚洲妇女| 色综合天天天天做夜夜夜夜做| 奇米777欧美一区二区| 亚洲日本欧美天堂| 久久久久久久久蜜桃| 欧美剧情电影在线观看完整版免费励志电影| 精品伊人久久久久7777人| 欧美v国产在线一区二区三区| 九九九精品视频| 中文字幕av不卡| www国产亚洲精品久久麻豆| 亚洲一区免费视频| 欧美日韩在线精品一区二区三区激情| 一区二区三区中文字幕在线观看| www.性欧美| 日韩国产高清在线| 欧美中文字幕亚洲一区二区va在线| 中日韩av电影| 3751色影院一区二区三区| 国产精品久久久久久久久久免费看| av网站一区二区三区| 国产寡妇亲子伦一区二区| 日韩经典一区二区| 亚洲国产精品久久久久婷婷884| 欧美国产欧美亚州国产日韩mv天天看完整| 日韩一区二区三区视频在线| 欧美精品粉嫩高潮一区二区| 91久久线看在观草草青青| 94-欧美-setu| 99久久综合精品| 91在线观看地址| 91女神在线视频| 波多野结衣一区二区三区| 国产成人免费在线视频| 黄页网站大全一区二区| 国产一区在线视频| 精品一区二区三区日韩| 经典一区二区三区| 国产精品99久久久久久宅男| 国产一区二区在线观看免费| 国产在线播放一区二区三区| 国产精品自拍网站| 福利电影一区二区三区| 丁香网亚洲国际| 99久久精品免费看国产免费软件| 99精品视频一区二区| 欧洲色大大久久| 3atv一区二区三区| 2014亚洲片线观看视频免费| 精品国产制服丝袜高跟| 久久精品一区二区三区不卡 | 香蕉加勒比综合久久 | 亚洲综合图片区| 亚洲国产成人av网| 久久狠狠亚洲综合| 粉嫩绯色av一区二区在线观看| 高清不卡在线观看| 色偷偷久久一区二区三区| 欧美美女直播网站| 91精品国产综合久久福利| 久久久亚洲国产美女国产盗摄| 国产精品网站在线观看| 亚洲精品国久久99热| 免费久久精品视频| 成人黄色电影在线| 欧美人伦禁忌dvd放荡欲情| 欧美sm美女调教| 最新国产精品久久精品| 偷拍与自拍一区| 粉嫩aⅴ一区二区三区四区| 色偷偷88欧美精品久久久| 欧美精品自拍偷拍动漫精品| 久久久久久亚洲综合影院红桃 | 中文字幕一区二区在线播放| 亚洲日本在线天堂| 毛片一区二区三区| 国产凹凸在线观看一区二区| 91视频在线观看免费| 日韩视频一区二区| 日韩成人一级大片| 国产成人免费在线| 91精品国产免费久久综合| 中文字幕精品综合| 精品无人区卡一卡二卡三乱码免费卡| 欧美一卡二卡三卡| 精品久久一二三区| 亚洲一区二区三区激情| 国产精品主播直播| 欧美一区二区在线视频| 亚洲欧美另类图片小说| 精品一区二区三区av| 欧美少妇性性性| 中文字幕日韩av资源站| 国内一区二区视频| 欧美日韩日日骚| 亚洲色图19p| 丁香激情综合五月| 久久女同互慰一区二区三区| 亚洲v中文字幕| 色婷婷综合久久久久中文| 欧美激情一区二区| 国产一区二区影院| 欧美大片在线观看一区| 午夜精品视频一区| 欧美午夜精品免费| 亚洲色欲色欲www| 成人爱爱电影网址| 国产蜜臀97一区二区三区| 激情文学综合丁香| 欧美mv日韩mv| 狠狠色丁香婷综合久久| 欧美一区二区福利在线| 日韩不卡手机在线v区| 欧美日韩小视频| 亚洲成人免费视频| 欧美视频中文字幕| 艳妇臀荡乳欲伦亚洲一区| 色综合天天综合在线视频| 日韩毛片视频在线看|