加载位图图像至特定尺寸

2024-05-19

我正在尝试使用 allegro 将位图加载到特定大小。

al_crate_bitmap(x,y) - 创建特定大小的位图 al_load_bitmap(filename) - 加载我需要的图像,但为其原始大小。

我需要将位图加载到我设置的大小。有任何想法吗?

谢谢, 桑尼


关键是al_draw_scaled_bitmap()。这样,您就可以将任何源位图以任何新尺寸位图传输到目标位图上。因此您实际上可能不需要创建新的位图。您始终可以使用该函数以不同的尺寸绘制位图。 Allegro 5 是硬件加速的,因此这些类型的操作通常是“免费的”。

直接回答问题:

ALLEGRO_BITMAP *load_bitmap_at_size(const char *filename, int w, int h)
{
  ALLEGRO_BITMAP *resized_bmp, *loaded_bmp, *prev_target;

  // 1. create a temporary bitmap of size we want
  resized_bmp = al_create_bitmap(w, h);
  if (!resized_bmp) return NULL;

  // 2. load the bitmap at the original size
  loaded_bmp = al_load_bitmap(filename);
  if (!loaded_bmp)
  {
     al_destroy_bitmap(resized_bmp);
     return NULL;
  }

  // 3. set the target bitmap to the resized bmp
  prev_target = al_get_target_bitmap();
  al_set_target_bitmap(resized_bmp);

  // 4. copy the loaded bitmap to the resized bmp
  al_draw_scaled_bitmap(loaded_bmp,
     0, 0,                                // source origin
     al_get_bitmap_width(loaded_bmp),     // source width
     al_get_bitmap_height(loaded_bmp),    // source height
     0, 0,                                // target origin
     w, h,                                // target dimensions
     0                                    // flags
  );

  // 5. restore the previous target and clean up
  al_set_target_bitmap(prev_target);
  al_destroy_loaded_bmp(loaded_bmp);

  return resized_bmp;      
}

我已经评论了代码中的基本步骤。请记住,Allegro 5 有一个隐式目标,通常是显示器的后台缓冲区。但是,如上面的代码所示,如​​果需要执行位图到位图操作,则可以定位其他位图。

另一种方法是将目标位图移到函数之外:

void load_bitmap_onto_target(const char *filename)
{
  ALLEGRO_BITMAP *loaded_bmp;
  const int w = al_get_bitmap_width(al_get_target_bitmap());   
  const int h = al_get_bitmap_height(al_get_target_bitmap());

  // 1. load the bitmap at the original size
  loaded_bmp = al_load_bitmap(filename);
  if (!loaded_bmp) return;

  // 2. copy the loaded bitmap to the resized bmp
  al_draw_scaled_bitmap(loaded_bmp,
     0, 0,                                // source origin
     al_get_bitmap_width(loaded_bmp),     // source width
     al_get_bitmap_height(loaded_bmp),    // source height
     0, 0,                                // target origin
     w, h,                                // target dimensions
     0                                    // flags
  );

  // 3. cleanup
  al_destroy_bitmap(loaded_bmp);
}

ALLEGRO_BITMAP *my_bmp = al_create_bitmap(1000,1000);
al_set_target_bitmap(my_bmp);
load_bitmap_onto_target("test.png");
// perhaps restore the target bitmap to the back buffer, or continue
// to modify the my_bmp with more drawing operations.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

加载位图图像至特定尺寸 的相关文章

  • Python绕相机轴旋转图像

    假设我有一个图像 是在对某些原始图像应用单应性变换 H 后获得的 未显示原始图像 将单应性 H 应用于原始图像的结果是该图像 我想围绕合适的轴 可能是相机所在的位置 如果有的话 将此图像旋转 30 度以获得此图像 如果我不知道相机参数 如何
  • python:将base64编码的png图像转换为jpg

    我想使用 python 将一些 base64 编码的 png 图像转换为 jpg 我知道如何从 Base64 解码回原始 import base64 pngraw base64 decodestring png b64text 但现在我怎样
  • asp.net 检查 imageURL 是否存在

    我正在尝试从另一个 Intranet 站点获取用户的缩略图 但其中一些不遵循预定义的格式 这意味着我想加载默认的缩略图 检查图像 URL 是否有效的最佳方法是什么 根据您获取图像的方式 此方法的变体可能会起作用 img src alt My
  • 在 Java 中有效地对图像进行颜色循环

    我正在编写一个曼德尔布罗分形查看器 我想以智能的方式实现颜色循环 给定一个图像 我想修改它的 IndexColorModel 据我所知 没有办法修改 IndexColorModel 也没有办法为图像提供新的 IndexColorModel
  • 控制 HTML 中的图像加载顺序

    有没有办法控制网页上图像的加载顺序 我正在考虑尝试通过首先加载轻量级 加载 图形来模拟预加载器 有任何想法吗 Thanks 使用 Javascript 并填充图像src属性稍后 这 告诉浏览器链接到页面上的 URL 因此不会向服务器发送请求
  • 如何使用onDraw(Canvas)获取WebView的位图快照(Android)

    我曾经使用 capturePicture 方法来制作 WebView 的快照 此方法在 API 级别 19 中已弃用 该文档说 使用 onDraw Canvas 获取 WebView 的位图快照 但我真的不知道它是什么意思 你能教我如何解决
  • Android:将图像裁剪为特定尺寸

    我的目的是让用户从图库中选择一张图像 然后进行裁剪活动 但是 我需要将定义裁剪蒙版的矩形锁定到某个尺寸 然后用户只需重新定位它即可显示图像的一部分 关于如何做到这一点有什么想法吗 Thanks T Intent intent new Int
  • 如何在启用抗锯齿的情况下旋转可绘制对象

    我需要将 ImageView 旋转几度 我通过子类化 ImageView 和重载来做到这一点onDraw Override protected void onDraw Canvas canvas canvas save canvas sca
  • 从字节数组设置 img src

    我需要设置img src我在对象中拥有的字节数组的属性 img
  • SSRS:报告加载外部图像,找不到图像,我可以隐藏图像控件吗

    我的 SSRS 报告从报告服务器上的客户编号特定文件夹中加载每个客户的徽标图像 我编写一个表达式 根据客户编号形成图像的 URL http localhost images iCustomerNumber ToString logo gif
  • 如何创建具有“可悬停”区域的图像,以在 jQuery 或 HTML5 中显示附加信息

    我正在尝试创建一些我认为在 jQuery 或 HTML5 中应该很简单的东西 但我很难找到它的资源 如果有人可以提供帮助 我们将不胜感激 目标 我有一张包含 16 个可悬停部分的图像 该图像的其他部分是完全静态的 如果用户将鼠标悬停在预定义
  • 是否可以通过 UIActivityViewController 共享图像并保留 exif 数据?

    我有一个应用程序 可以通过以下方式将图像保存到相机胶卷中的自定义相册中 library writeImageToSavedPhotosAlbum newTestImage CGImage metadata metadata completi
  • Osmdroid:如何从我自己的位图(图块)创建和加载地图?

    我开始使用 Osmdroid 我想使用这项技术来显示有关 F1 赛道的地图 我有一张大图片 我可以将它切割成更小的图块 我可以修改osmdroid库来上传这些图片吗 我想将这些位图 图块 保存在我的资产文件夹中 我非常不知道如何做到这一点
  • 如何将透明 PNG 加载到位图并忽略 Alpha 通道

    我看到很多关于如何加载带有 alpha 通道的 PNG 并显示它的问题 但没有关于如何加载具有 alpha 通道的 PNG 但忽略 alpha 通道 从而显示底层 RGB 数据的问题 我尝试简单地从 Alpha 通道中删除所有数据 但我只得
  • view.getDrawingCache() 在 Android API 28 中已弃用

    在 Android API 28 中view getDrawingCache 已被弃用 是否有任何更新的解决方案来生成 android 中特定视图的位图 获取视图位图的两种方法 使用画布 使用像素 API Canvas Java Bitma
  • PHP显示图片从url到主页

    在没有人回答这个问题之后Php Rss feed 在 CDATA gt content encoded 中使用 img https stackoverflow com questions 31771729 php rss feed use
  • 是否可以进一步压缩 Base64 PNG 字符串?

    我有一个 PNG 图像并获得了它的 Base64 PNG 字符串表示形式 它仍然很大 我想知道是否可以进一步压缩它 这可能吗 背景 我正在使用 Selenium 2 Java 创建当前网页的屏幕截图 将其转换为 base64 字符串并将该字
  • Android 在画布上遮罩位图生成黑色空间

    我有一个蒙版位图 一半是红色 一半是透明的 如下所示https www dropbox com s 931ixef6myzusi0 s 2 png https www dropbox com s 931ixef6myzusi0 s 2 pn
  • 在 Markdown 中添加文本和图像之间的空格

    在 Markdown 中 您将图像添加为 myimg link 现在 我可以使用以下属性轻松更改所述图像的大小和位置 myimg link height 75px width 300px align left 我怎样才能使图像和文本之间也有
  • 在什么情况下,使用 HTTP/2 单独加载图像会比使用 HTTP/1.1 中的精灵一次加载所有图像慢?

    HTTP 2 使多路复用连接成为可能 从而消除了与服务器的多个连接的需要 通过单个连接 可以将许多单独的图像发送到客户端 这避免了将多个图像组合成一个并使用 CSS 将其分开的旧图像精灵模式 我很好奇精灵在 HTTP 2 世界中是否仍然会更

随机推荐

  • 如何使用 sinon/mocha 模拟 npm 模块

    我正在尝试测试调用该模块的函数cors 我想测试一下cors会被称为 为此 我必须存根 模拟它 这是函数 cors js const cors require cors const setCors gt cors origin http l
  • 读取文本文件并将列存储在数组中

    我的文件看起来像这样 01 01 5 00 1 50 7 50 02 01 4 00 3 00 12 00 02 02 3 00 4 00 12 00 03 01 4 50 3 00 13 50 03 01 7 50 2 50 18 75
  • Bot Framework Node.js 发送给特定用户的临时消息

    我已经盯着这个问题好几个小时了 找不到解决方案 即使根据所有建议 它应该很容易 https learn microsoft com en us bot framework nodejs bot builder nodejs proactiv
  • C#驱动开发?

    在我一头扎进 C 之前 我一直认为 C 或 C 最适合在 Windows 上开发驱动程序 我不喜欢在 NET 机器上开发驱动程序的想法 但 NET 似乎是 MS 应用程序开发的方向 所以我现在想知道 人们正在使用 C 来开发驱动程序吗 您是
  • CMake:用于Android交叉编译的FIND_PACKAGE(Threads)

    我正在使用 Android NDK 和 Cmake 生成项目的共享库 我正在将现有项目从 Ubuntu 移植到 Android 现在我需要移植一些可执行文件 我成功编译了所有需要的可执行文件Threads图书馆 在CMakeList txt
  • 我可以/如何用 RC3 替换我的 KVO 东西?

    我正在尝试将一个使用 Facebook 的 KVOController 的 objc 应用程序移植到 Swift 我被鼓励去看看RC3 https github com ReactiveCocoa ReactiveCocoa作为一种替代且更
  • 在 swrevealcontroller 之前实现登录屏幕

    我刚刚开始学习 IOS 开发 我已经按照给定的在线教程成功实现了 SWRevealViewController 一切都按预期工作 然后 我决定添加一个登录屏幕 这将是应用程序运行时用户看到的第一个页面 我采取的步骤如下 将 UIViewCo
  • IntelliJ 社区版 - 如何导入 Eclipse 项目?

    IntelliJ Community Edition 中似乎没有 eclipse 支持 您知道将 Eclipse 项目导入 IntelliJ Community Edition 的聪明方法吗 也可以看看http blogs jetbrain
  • Azure 云服务在应用程序池回收后停止运行

    我部署了一个 Azure 云服务 WebRole WebAPI 只有一个实例 我注意到 如果我等待一些空闲时间 没有 HTTP 请求 那么稍后服务就会死掉 并且对它的每个请求都会导致以下响应 Message An error has occ
  • 使用新式函数声明引用尚未提及的函数参数

    被迫将可变长度数组功能用于打印方阵的辅助函数 我将其定义如下 void print matrix M dim unsigned dim int M dim dim Print the matrix here 好消息是 代码可以正常工作 并且
  • std::accumulate 未按预期运行

    我使用 std accumulate 和测试代码得到了意外的结果 我正在尝试将一个大的双精度向量相加 但由于某种原因该值溢出 include
  • 绑定导致 StackOverflow

    我不确定我在这里做错了什么 可以说 我有两个用户控件BoxAand BoxB 两者都有一个名为的 DependencyPropertyText BoxB 包装了具有常规 TextBox 的 BoxA 绑定应该像这样 BoxB Text Bo
  • 仅将 UIImage 移动到另一个 UIImage 内部

    I have an UIImage which is shown in an UIImageView I also have another image in an UIImageView which lays above the firs
  • Apexcharts 项目栏上的最大宽度

    如何更改 Apexcharts 中项目栏的最大宽度 高度 https apexcharts com https apexcharts com 我有一个水平条形图 其数据是动态加载的 并且用户 项目 的数量各不相同 当用户很少或只有一个用户时
  • 使用@Singleton和@Stateless加载和缓存应用程序范围的数据

    我正在寻找一种优雅的解决方案来解决加载和缓存的老问题static shared应用程序启动时的数据 具有无限的生命周期 我以前的方法是 Spring Singleton Bean 但我现在正在尝试用 Spring Singleton Bea
  • 在 Ubuntu 上将 MPICH 与 Boost.MPI 结合使用

    我试图在 Ubuntu 12 04 下使用 boost mpi apt get 将安装 openmpi 但我运行一些其他软件 涉及扭矩 期望 mpich2 mpich 并抱怨 mpdstartup 找不到命令 我当然不想乱改软件来使用 op
  • Linux 内核标识符中前导和尾随下划线的含义是什么?

    我不断遇到一些小约定 比如 KERNEL Are the 在这种情况下 是内核开发人员使用的命名约定 还是以这种方式命名宏的语法特定原因 整个代码中有很多这样的例子 例如 某些函数和变量以 甚至 这有什么具体原因吗 它似乎被广泛使用 我只需
  • Android 存储库初始化失败

    我想我非常仔细地遵循该网站的说明 http source android com source downloading html http source android com source downloading html 但是当我尝试这
  • GCC 5 及更高版本中的 AVX2 支持

    我编写了以下类 T 来加速操作 使用 AVX2 的 字符集 然后我发现它不起作用 gcc 5 及更高版本当我使用 O3 时 谁能帮我追踪到一些编程结构 已知不适用于最新的编译器 系统 该代码的工作原理 底层结构 bits 是一个 256 字
  • 加载位图图像至特定尺寸

    我正在尝试使用 allegro 将位图加载到特定大小 al crate bitmap x y 创建特定大小的位图 al load bitmap filename 加载我需要的图像 但为其原始大小 我需要将位图加载到我设置的大小 有任何想法吗