首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏嵌入式项目开发

    基于STM32设计的掌上游戏机(运行NES游戏模拟器)详细开发过程

    = 0; NES_scanline < 240; NES_scanline++) { run6502(113*256); // 运行6502 指令 NES_Mapper->HSync(NES_scanline); // 水平同步 // 行扫描绘制 if(nes_frame == 0) scanline_draw(NES_scanline); else do_scanline_and_dont_draw (NES_scanline); } // 垂直消隐期处理 // ... (int LineNo) { uint16 i; u16 sx, ex; do_scanline_and_draw(ppu->dummy_buffer);

    12.2K35编辑于 2025-09-03
  • 来自专栏10km的专栏

    minigui:增加__mg_save_jpg保存JPEG格式图像

    } } /* Step 5: 逐行执行压缩 */ jpeg_start_compress(cinfo, TRUE); while (cinfo->next_scanline retcode; } 色彩空间转代码: // 索引色(16色) 转换为RGB static BYTE* MYBITMAP_get_pixel_row_pal16(unsigned int next_scanline mybmp,RGB* pal,BYTE* linebuffer) { Uint16* bits = (Uint16*)(mybmp->bits + mybmp->pitch * next_scanline ); } // BGR to RGB static BYTE* MYBITMAP_get_pixel_row_BGR(unsigned int next_scanline, MYBITMAP * mybmp,RGB* pal,BYTE* linebuffer) { BYTE* bits = mybmp->bits + mybmp->pitch * next_scanline;

    80930发布于 2019-05-25
  • 来自专栏韩曙亮的移动开发专栏

    【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( 初始化压缩对象 | 打开文件 | 设置压缩参数 | 写入压缩图像数据 | 完成压缩 | 释放资源 )

    写入压缩数据原理 : 使用函数库的状态变量, cinfo.next_scanline 作为循环控制变量 , 这样就可以不同自己实现循环控制 , 为了保持代码简单, 每次传递一行图像数据 ; 2 . 是每一行的字节数 cinfo.next_scanline 是当前的行数 计算出来的 pixels 指针, 指向要写出行的首地址 4 . 循环控制变量自增 : jpeg_write_scanlines(&cinfo, row, 1) , 调用 jpeg_write_scanlines 方法后, cinfo.next_scanline 自动加 * row_stride; row[0] = pixels; // 调用 jpeg_write_scanlines 方法后, cinfo.next_scanline 自动加 循环写入数据 /* 循环原理 : 使用函数库的状态变量, cinfo.next_scanline 作为循环控制变量 * 这样就可以不同自己实现循环控制 * 为了保持简单,

    2.6K20编辑于 2023-03-27
  • 来自专栏腾讯AlloyTeam的专栏

    png的故事:获取图片信息和像素内容

    function filterNone(scanline, bytesPerPixel, bytesPerRow, offset) { for(let i=0; i<bytesPerRow; i ++) { pixelsBuffer[offset + i] = scanline[i]; } } 过滤类型1:Sub 记录X - A的值,即当前像素和左边像素的差值。 function filterSub(scanline, bytesPerPixel, bytesPerRow, offset) { for(let i=0; i<bytesPerRow; i+ // 第一行,不作解析 for(let i=0; i<bytesPerRow; i++) { pixelsBuffer[offset + i] = scanline function filterAverage(scanline, bytesPerPixel, bytesPerRow, offset) { if(offset < bytesPerRow) {

    7.4K00发布于 2017-04-27
  • 来自专栏一棹烟波

    libJPEG-turbo库使用示例代码

    .); */ 101 /* Here we use the library's state variable cinfo.output_scanline as the 102 * loop counter, so that we don't have to keep track ourselves. 103 */ 104 while (cinfo.output_scanline * Here the array is only one element long, but you could ask for 107 * more than one scanline wants a pointer and sample count. */ 111 //put_scanline_someplace(buffer[0], row_stride); < cinfo_compress.image_height) { 418 row_pointer[0] = &image_buffer[cinfo_compress.next_scanline

    3.4K80发布于 2018-01-12
  • 来自专栏计算机学习

    NES基本原理(五)高级玩法

    滚屏渲染 本文继续来说滚屏渲染,讲述每条 Scanline 每个周期具体干些什么事情。 Scanline,也可以当作坐标来看,(scanline,cycle),下面来详细地解读一下上图 scanline 0-239 这是可见的 240 条 scanlines,每个周期干的事情如下: cycle Post-render(240) scanline 240 为 post-scanline,不干什么事,空闲 V_Blank(241-260) scanline 241-260 这 20 条 scanline 这里对应着那张图的最后一行,描述可见的 240 条 scanline 和 预渲染的 1 条 scanline cycle 1 同样的空闲 cycle 1-64 清空 Secondary OAM,指的是将 屏幕分割 到此每条 scanline 每个周期干啥说完了,下面来说一些高级玩法,就是屏幕分割技术。

    71410编辑于 2023-12-16
  • 来自专栏Pulsar-V

    图像处理基础(六)-libjpeg常用算法

    = cinfo.image_width*cinfo.input_components; JSAMPROW row_pointer[1]; while(cinfo.next_scanline < cinfo.image_height) { row_pointer[0] = & rgb[(cinfo.image_height-cinfo.next_scanline-1 = cinfo.image_width*cinfo.input_components; JSAMPROW row_pointer[1]; while(cinfo.next_scanline < cinfo.image_height) { //row_pointer[0] = & rgb[cinfo.next_scanline * row_stride]; -1)*(width*depth); while(cinfo.output_scanline<height) { jpeg_read_scanlines(&cinfo,

    1K30发布于 2019-03-12
  • 来自专栏算法+

    自动红眼移除算法 附c++完整代码

    per1 := 100 / (fSelY2 - fSelY1 + 0.5); for row := fSelY1 to fSelY2 do begin px := bitmap.Scanline = input + Y * width * depth + Left * depth; unsigned char *out_scanline = output + Y * width [0]; int Green = in_scanline[1]; int Blue = in_scanline[2]; [0] = ClampToByte(powr * Red + 0.5f); out_scanline[1] = ClampToByte(powg * Green } in_scanline += depth; out_scanline += depth; } } } int main(int

    1.8K130发布于 2018-05-07
  • 来自专栏ATYUN订阅号

    英特尔AI和2500个处理器将栩栩如生的巨齿鲨搬上银幕

    Scanline VFX使用Ziva VFX软件和英特尔至强处理器创造了这种被称为巨齿鲨的生物,十分逼真(即使这些野兽看起来很神秘)。 除了将巨齿鲨带入生活之外,Scanline和Ziva还需要确保其在海洋中的运动,这是一种流体的背景,是现实的。 此外,Scanline使用英特尔至强处理器为电影渲染镜头。 “为了创造这部电影,我们的计算机系统需要大量的性能,”Scanline总裁兼视觉特效监督员Stephan Trojansky表示,“多年以前,你需要一个巨大的渲染农场和一个大的团队才能获得少量的镜头,而今天

    36320发布于 2018-08-16
  • 来自专栏各类技术文章~

    云图三维 | Three.js 后期处理

    - const filmPass = new THREE.FilmPass( - 0.35, // noise intensity - 0.025, // scanline intensity - 648, // scanline count - false, // grayscale - ); - filmPass.renderToScreen = true; - composer.addPass bloomPass); const filmPass = new FilmPass( 0.35, // noise intensity 0.025, // scanline intensity 648, // scanline count false, // grayscale ); filmPass.renderToScreen intensity'); folder.add(filmPass.uniforms.sCount, 'value', 0, 1000).name('scanline count'); folder.open

    3.5K11发布于 2021-11-06
  • 来自专栏Qt项目实战

    Qt音视频开发41-人脸识别嵌入式

    const QImage &img, quint8 *bgr, int w, int h) { for (int i = 0; i < h; ++i) { const quint8 *scanline = img.scanLine(i); for (int j = 0; j < w; ++j) { *bgr++ = scanline[j * 3 + 0]; *bgr++ = scanline[j * 3 + 1]; *bgr++ = scanline[j * 3 + 2]; } } } void FaceLocalArm

    1.3K20发布于 2020-10-28
  • 来自专栏林德熙的博客

    dotnet 理解 X11 的 24 位或 32 位色深窗口

    gc, &img, 0, 0, x, y, (unsigned int) width, (unsigned int) height, dest_bits_per_pixel, dest_scanline_pad unsigned int req_width, unsigned int req_height, int dest_bits_per_pixel, int dest_scanline_pad , gc, image, req_xoffset, req_yoffset, x, y, req_width, req_height, dest_bits_per_pixel, dest_scanline_pad , int y, unsigned int req_width, unsigned int req_height, int dest_bits_per_pixel, int dest_scanline_pad register XImage *image, int req_xoffset, int req_yoffset, int dest_bits_per_pixel, int dest_scanline_pad

    43310编辑于 2024-07-13
  • 来自专栏数据科学(冷冻工厂)

    使用自定义 PyTorch 运算符优化深度学习数据输入管道

    特别是,libjpeg-turbo 包含许多函数,使我们能够仅解码图像中的预定义裁剪,例如 jpeg_skip_scanlines 和 jpeg_crop_scanline。 kU8); auto ptr = tensor.data_ptr<uint8_t>(); unsigned int update_width = crop_width; jpeg_crop_scanline nullptr; if(offset > 0) temp = new uint8_t[cinfo.output_width * channels]; while (cinfo.output_scanline * Here the array is only one element long, but you could ask for * more than one scanline ptr += stride; } if(offset > 0){ delete[] temp; temp = nullptr; } if (cinfo.output_scanline

    42910编辑于 2023-10-25
  • 来自专栏福大大架构师每日一题

    文心一言 VS 讯飞星火 VS chatgpt (199)-- 算法导论14.3 7题

    && scanLine <= rect.y2 { if scanLine == rect.y1 { // 如果扫描线在矩形的底部边缘 if rect.x1 < scanLine { intersections = append(intersections, scanLine) > scanLine { intersections = append(intersections, scanLine) } } else { // 如果扫描线在矩形的内部 if rect.x1 <= scanLine && scanLine <= rect.x2 { intersections = append(intersections, scanLine) }

    35820编辑于 2024-02-17
  • 来自专栏转载gongluck的CSDN博客

    使用Jpeglib

    //开始解压缩 jpeg_start_decompress(&cinfo); JSAMPROW row_pointer[1]; while (cinfo.output_scanline < cinfo.output_height) { row_pointer[0] = &data[(cinfo.output_scanline)*cinfo.image_width

    1.3K90发布于 2018-03-08
  • 来自专栏进击的多媒体开发

    图像库 libjpeg-turbo 编译与实践

    int row_stride = jpegCompressStruct.image_width * nComponent; while (jpegCompressStruct.next_scanline // data 参数就是要压缩的数据源 // 逐行读取像素内容 row_point[0] = &data[jpegCompressStruct.next_scanline next_scanline 类似于一个状态变量,需要逐行去扫描图像内容并写入,每次 jpeg_write_scanlines 方法之后,next_scanline 就会递增,直到退出循环。 变量去存储图像每行解压的数据,然后把这个数据给到 src_buff 变量,如下代码所示: unsigned char *point = src_buff; while (cinfo.output_scanline

    3.7K20发布于 2019-07-24
  • 来自专栏小徐学爬虫

    如何使用Python创建目录或文件路径列表

    # 执行命令转换每个文件 cmd = '/Applications/OpenImageIO/dist/macosx/bin/iconvert --inplace --scanline # 执行命令转换每个文件 cmd = '/Applications/OpenImageIO/dist/macosx/bin/iconvert --inplace --scanline

    3.7K10编辑于 2024-09-13
  • 来自专栏游戏杂谈

    libjpeg的问题

    cinfo;     struct jpeg_error_mgr jerr;     /* libjpeg data structure for storing one row, that is, scanline jpeg into the raw buffer */         /* read one scan line at a time */         while( cinfo.output_scanline

    1.5K40发布于 2018-11-20
  • 来自专栏一心无二用,本人只专注于基础图像算法的实现与优化。

    SSE图像算法优化系列五:超高速指数模糊算法的实现和优化(10000*10000在100ms左右实现)。

    { gint zR; gint zG; gint zB; gint zA; gint index; guchar* scanline ; scanline = &(pixels[line * width * channels]); zR = *scanline << zprec; zG = *(scanline + 1) << zprec; zB = *(scanline + 2) << zprec; zA = *(scanline + 3) << zprec; for (index = 0; index < width; index ++) _blurinner(&scanline[index * channels], &zR, &zG, &zB, &zA, alpha , aprec, zprec); for (index = width - 2; index >= 0; index--) _blurinner(&scanline[index

    1.5K100发布于 2018-01-03
  • 来自专栏汪宇杰博客

    ASP.NET Core 生成验证码

    bSrc.Width, bSrc.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); int scanline = null) { p[0] = pSrc[yOffset * scanline + xOffset * 3]; p[1] = pSrc[yOffset * scanline + xOffset * 3 + 1 ]; p[2] = pSrc[yOffset * scanline + xOffset * 3 + 2];

    4.8K30发布于 2019-07-08
领券