我正在寻找从带有此内容的字符串中写1个位图的可能性: $str = "001011000111110000"; 零是白色,一个是黑色. BMP文件将为18 x 1 px. 我不想要24位BMP,而是真正的1bit BMP. 有人知道PHP中的标题和转换方法吗? 解决方案 这有点奇怪:) 所以,您要在此处使用的是PHP-GD.通常,当在任何具有不错的存储库的操作系统上安装PHP时,都包括其中包括,但是仅适用于您,您就可以在此处获取安装说明; http://www.php.net/manual/manual/en/image. setup.php 首先,我们需要确切确定图像需要宽度有多大;高度显然永远是一个. so; $str = $_GET['str']; $img_width = strlen($str); strlen会告诉我们$ str字符串中有多少个字符,并且由于我们每个字符给出一个像素,所以字符的数量将为我们提供所需
以下是关于 bitmap 的编程技术问答
我有这些可能的位标志. 1, 2, 4, 8, 16, 64, 128, 256, 512, 2048, 4096, 16384, 32768, 65536 因此,每个数字都像服务器端上的真/错误语句.因此,如果前3个项目,并且只有前3个项目在服务器端上标记为" true",则Web服务将返回7. Web服务是所有这些数字的总和. 处理我获得的数字的最佳方法是什么,以找出哪些项目标记为" true"? 解决方案 if (7 & 1) { // if bit 1 is set in returned number (7) } 其他解决方案 使用一些掩蔽操作员.在C语言中: X & 8 是正确的,如果设置了" 8" s位. 您可以枚举钻头面具,并计算设置多少个. 如果确实是整个单词都包含位的情况,那么您只想简单地 计算设置了多少位,您本质上希望"人口数".绝对 获得人口数量的最快方法是执行本地" popcnt" 在计算机的指令集中可用.
我正在为Android应用程序开发Splash屏幕,我想简单地将Photoshop中设计的图像作为背景.问题在于,当我保存图像时,其分辨率为1080 x 1920,但是当我将其添加为Android Studio中的可绘制时,它给了我错误"位图太大...",并说该分辨率为3240 x 5760 (恰好大3倍).我不知道为什么会发生这种情况,你能帮我吗? 谢谢 解决方案 drawable Android中的文件夹实际上代表drawable-mdpi文件夹. 如果将图像放在drawable文件夹中,它们将在具有较高DPI的设备中升级.这就是为什么您要获得更大图像的原因. 将您的图像放入drawable-nodpi文件夹中,以防止图像的自动缩放. 其他解决方案 您也可以使用此中复制这6个文件夹.
我目前正在像应用程序这样的杂志上工作.由于可以选择放大(150%,200%,占原始来源的250%),因此我宁愿不缩放图像.但是,当我尝试解码映像由于内存不足时,该应用将强制重新启动.有什么建议可以解决吗? 图像是本地(SD卡),可以以任何方法检索,但是最终需要是位图,因为我使用cavans.drawbitmap之类的东西来显示它.我尝试了输入流 - >字节,输入流 - >位图等...但是有任何最有效的方法还是至少 我可以确定该应用不会强制重新启动/关闭?谢谢 try { InputStream is = (InputStream) new URL(url).getContent(); try { return BitmapFactory.decodeStream(is); } finally { is.close();
我正在尝试使整数数组和位图和谐起作用,作为C#Winforms项目的一部分,用于快速picturebox编辑(避免使用慢setpixel命令). 我添加了一个按钮和一个picture框,上述按钮上的单击事件以及表格上的关闭事件. 该表单的代码现在就像: public partial class Form1 : Form { uint[] _Pixels { get; set; } Bitmap _Bitmap { get; set; } GCHandle _Handle { get; set; } IntPtr _Addr { get; set; } public Form1() { InitializeComponent(); int imageWidth = 100; //1920; int imageHeight = 100; // 1080;
我直接从mp3中加载图像,并在我的应用中显示它们和歌曲标题.为了使过程平滑,我正在使用异步和将图像加载在背景中.如果我慢慢滚动,则图像以正确的顺序出现.但是,如果我快速上下滚动,则这些图像偶数2-3秒(如以不正确的顺序出现). 2-3秒后,订单再次正常.我该如何避免这种情况?这是我的代码: public class TestAcitivity extends SherlockListActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ActionBar ab = getSupportActionBar(); Uri sourceUri = MediaStore.Audio.Media.EXTERNAL_CON
我有一个Delphi 6应用程序,该应用程序可实时将位图发送到直接滚动DLL,每秒25帧. DirectShow dll也是我的代码,也使用Dspack DirectShow组件套件在Delphi 6中编写.我有一个简单的代码块,可以通过位图中的每个像素修改图像的亮度和对比度,如果设置了某个标志,否则将位图推出了DirectShow dll dll dll未修改(推源视频过滤器).代码曾经在主应用程序中,然后我将其移至DirectShow DLL中.当它在主要应用程序中时,它运行良好.我可以按预期看到位图的变化.但是,现在代码位于DirectShow dll中,它有以下问题: 当下面的代码块处于活动状态时,DirectShow DLL确实很慢.我有一个四核i5,这真的很慢.我还可以看到CPU消费量很大.相比之下,在主应用程序中运行的相同代码在旧的单核P4 上运行良好.它确实在那台旧机器上明显触及了CPU,但是视频很顺畅,没有问题.图像只有352 x 288像素. 我看不到可见
我正在使用LockedBitmap类,可以简化使用C#中的位图数据.当前,它将数据复制到本地byte[]数组中,然后通过其类方法访问该数据以获取/设置像素颜色值. 这比直接通过指针访问锁定的位图数据更快或更好?是否完全需要副本? 编辑:我不是问它是否可以直接使用位图数据,我每天都可以使用此功能.我只是在要求两种方法之间的比较,并且是否有必要复制像素数据. 将像素数据复制到温度数组: // create byte array to copy pixel values int step = Depth / 8; Pixels = new byte[PixelCount * step]; Iptr = bitmapData.Scan0; // Copy data from pointer to array Marshal.Copy(Iptr, Pixels, 0, Pixels.Length); 直接读取像素值: byte* p = (byte*)(void
目前,我正在使用SetPixel()方法来更改位图中每个像素的颜色.这在具有小尺寸的小图像上正常工作,但是当我在大图上进行测试时,确实需要一段时间. 我以前从未在vb.net中使用图像,所以我可能只是忽略了一些明显的东西.我正在这样做是为了制作一个将图像转换为灰度的程序.这会产生正确的结果,但是在此期间,UI冻结了,因此我渴望最大化转换速度. 这是我目前的代码: Dim tmpImg As New Bitmap(img) '"img" is a reference to the original image For x As Integer = 0 To tmpImg.Width - 1 For y As Integer = 0 To tmpImg.Height - 1 Dim clr As Byte With tmpImg.GetPixel(x, y) clr = ConvertToGrey(.R, .
对于我的Android应用程序,我从本机代码中获得了ByteBuffer.它包含像素颜色值以创建位图. 原始图像 - 我在位图上使用了copyPixelsFromBuffer,但是显示位图时我的颜色不正确. 这是此方法的代码 - 方法1 ByteBuffer buffer = ... Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); buffer.rewind(); bitmap.copyPixelsFromBuffer(buffer); 大约时间 - 〜0.4 ms 结果 - 错误的颜色 - 方法2 接下来我尝试了setPixels.它仍然给出错误的颜色,并且速度慢了10倍以上,并为int[]使用额外的内存.请注意,buffer.hasArray()是false,所以我无法从缓冲区获得数组. ByteBuffer buffer
在.NET中,您通常使用位图类存储图像.要快速访问它,您需要致电 lock()和unlock()将位图的内容复制到内存中.因此,这是否意味着位图在锁定之前未存储在包装的内存数组中? 到底需要锁定的需要是什么? (除了"不安全"内存访问注意事项) 一些可能的原因: 位图存储在其原始压缩表单中,以节省内存(PNG,JPEG等) 该位图以24-BPP格式存储,因此访问速度比32-BPP图像 位图不会存储在包装的内存数组中,并且被碎片片段,因此无法读取/写入快速 该位图以未公开的方式存储,并且该平台不希望您访问实际的位图数据存储器 - 强迫您使用lock() 在内存中创建它的副本 解决方案 位图以懒惰的方式阅读.所使用的实际算法在很大程度上取决于图像格式,.bmp文件很容易,.jpeg并不容易.在引擎盖下,GDI+创建了一个内存映射的文件,以便在必要时利用操作系统的需求条的虚拟内存映射功能,将文件数据映射到RAM中.正是此MMF臭名昭著地在文件上创建了一个锁
我已经创建了一个WPF控件(从Frameworkelement继承),该控件显示了一个可以放置的瓷砖图形.每个瓷砖为24BPP的256x256像素.我已经覆盖了.在那里,我加载了任何新瓷砖(作为bitmapframe),然后使用dra期context.drawimage. 绘制所有可见图块. 现在,每当每个渲染周期有少数新瓷砖时,帧率就会从60fps下降到零一秒钟.这不是由加载图像(以毫秒为单位的顺序)或绘制图(根本不需要时间)引起的,因为它仅填充了一些中间渲染数据结构). 我的猜测是,每当渲染线程获得大量(〜20)的新bitmapsource实例(即尚未被缓存)时,该线程本身就会扼杀.要么花费大量时间将它们转换为某些内部DirectX兼容格式,要么可能是一个缓存问题.它不能用完视频公羊;穿孔器在60MB以下显示峰值,我的峰值为256MB.另外,Pundorator说所有渲染目标都是硬件加速的,所以也不能. 任何见解都将不胜感激! 预先感谢 丹尼尔
我正在从事一个屏幕共享项目,我会不断地从Socket中收到一小部分映像,并且需要在我拥有的特定初始dekstop位图上更新它们. 基本上,我不断地读取套接字的数据(数据存储为jpeg映像),使用Image.FromStream()来检索图像并将收到的块像素复制到完整的主比特图(在特定位置X和我也从套接字中获得) - 这就是初始图像的更新方式.但是那是我需要在Picturebox上显示它的部分 我处理Paint事件,然后重新绘制全部 - 整个Inital图像,这很大(在我的情况下为1920x1080). 这是我的代码: private void MainScreenThread() { ReadData();//reading data from socket. initial = bufferToJpeg();//first intial full screen image. pictureBox1.Pai
我正在制作XNA应用程序,其中每秒从网络摄像头捕获屏幕截图,然后当像素颜色红色低于某个阈值时,我尝试将其转换为布尔数组.当我将其转换为纹理2D时,它不会滞后,但是当我尝试获得单个像素时,即使网络摄像头分辨率为176x144. 这是获取位图的代码: public Bitmap getBitmap() { if (!panelVideoPreview.IsDisposed) { Bitmap b = new Bitmap(panelVideoPreview.Width, panelVideoPreview.Height, PixelFormat.Format32bppRgb); using (Graphics g = Graphics.FromImage(b)) { Rectangle rectanglePanelVideoPreview
我正在编写一个Android游戏的过程中,我似乎在绘制画布方面存在性能问题.我的游戏有多个级别,每个级别都有(显然)其中的一个对象. 奇怪的是,在一个级别上包含45张图像,完美地运行(近60 fps).但是,另一个级别包含81张图像,几乎根本不运行(11 fps);这几乎是无法播放的.除了我之外,这似乎很奇怪吗? 我使用的所有图像都是.png,并且上述级别之间的唯一区别是图像的数量. 这里发生了什么?画布根本不会在每个游戏循环中绘制很多图像吗?你们如何建议我改善这种表现? 预先感谢. 解决方案 对我来说似乎也很奇怪.我还在开发一个游戏,很多级别,我可以在屏幕上轻松拥有100个游戏对象,没有看到类似的问题. 正确使用的是,drawbitMap的确应该非常快.它只是复制命令.我什至没有本地绘制圆圈;我有预渲染圆的位图. 但是,Android中位图的性能非常敏感您的工作方式.创建位图可能非常昂贵,因为Android默认情况下可以自动尺度CPU密集型P
我找到了几种用于优化WPF中的位图处理的模式.但是,我不明白何时使用每种模式.由于我认为这是一个普遍的问题,我总结了我的理解和猜测,并寻求您的帮助.如果您可以添加模式,请解释它们如何差异,说明他们是否使用 cpu或gpu 每个和如何结合它们,这将是巨大的帮助! 上下文 - 图像"网格"方案: 我的应用程序必须显示许多位图图像.这些图像显示在屏幕上的排网格式组织中(不一定是网格或单一格式类别,请想想窗口媒体播放器的专辑视图).图像可能在不同的网格单元之间移动.一些任意单元格的一些图像可能被其他图像所取代.图像应可单击,应提供上下文菜单,应该是可选的,可拖动等.换句话说,"将小bug虫组合到一个大比特图中"不适用,至少不适用. 模式0:hack 将小bugg虫组合到位图中(如何绘制上下文?),并将其用作背景.用空的内容覆盖此图像,这些图像将处理命中,上下文菜单,事件等. 优点是,我们在这里只谈论两个位图:当前显示的一个和应该替换的位图.这应该很快.但是,我多年的
api 26 特殊配置,仅将位图存储在图形内存中时. 此配置中的位图始终是不可变的.它是最佳的 情况,当唯一使用位图的操作是将其绘制 屏幕. 文档中未解释的问题: 我们现在应该始终更喜欢Bitmap.Config.HARDWARE Bitmap.Config.RGB_565当速度是优先级和质量的速度时 并且不可变性不是(例如,缩略图等)? 使用此选项解码后是否可以使用像素数据 消耗任何堆内存,仅驻留在GPU内存中?如果是这样,这似乎 终于对OutOfMemoryException担心 使用图像. 与RGB_565,RGBA_F16或ARGB_8888相比 从这个选项? 是解码的速度本身相同/更好/价值与 用RGB_565解码? (感谢@commonsware在评论中指向它) 如果我们在使用此图像解码时超过GPU内存,就会发生 选项?会抛出一些例外(也许是相同的OutOfMemoryException:)? 解决方案 文档和公共源代码尚未将其推向 Google
比下面的代码 有一种更有效的方法来获取Windows桌面的副本(使用GDI或任何其他库) HDC dcDesktop; HDC dcMem; HBITMAP hbmpMem; HBITMAP hOriginal; BITMAP bmpDesktopCopy; dcDesktop = GetDC( GetDesktopWindow() ); dcMem = CreateCompatibleDC( dcDesktop ); hbmpMem = CreateCompatibleBitmap( dcMem, m_lWidth, m_lHeight ); BitBlt( dcMem, 0, 0, m_lWidth, m_lHeight, dcDesktop, 0, 0, SRCCOPY ); // Copy the hbmpMem to the desktop copy GetObject(hbmpMem, s
我正在构建一个图像密集型社交应用程序,其中图像从服务器发送到设备.当设备具有较小的屏幕分辨率时,我需要在设备上调整位图,以匹配其预期的显示尺寸. 问题在于,使用 创建caledbitmap 使我在调整了大小的缩略图图像后遇到了许多内存错误. 在Android上调整位图的最有效的内存有效方法是什么? 解决方案 此答案来自有效地加载大型位图 这说明了如何使用Insamplesize加载缩小的位图 版本. In particular Pre-scaling bitmaps explains the details of various 方法,如何结合它们,哪些是最有效的记忆. 有三种主要的方法来调整具有不同内存属性的Android大小: 此API将使用现有的位图,并使用您选择的确切尺寸创建一个新的位图. 在正面,您可以准确地获得所需的图像大小(无论外观如何).但是缺点是,该API需要现有位图才能工作.这意味着在能够创建一个新的较小版本之前,必须加
我有一堆图像URL.我必须下载这些图像,并一对一地将其显示在我的应用程序中.我将图像保存在收藏集中,并在SDCARD上保存在集合中,以避免进行灌输并改善用户体验. 问题是我对位图的大小一无所知.事实证明,当我使用BitmapFactory.decodeStream(InputStream)方法时,我会偶尔获得OutofMemoryExceptions.因此,我选择使用BitMapFactory选项(样本尺寸= 2)对图像进行示例.这给出了更好的输出:没有OOM,但这会影响较小图像的质量. 我应该如何处理这种情况?有没有一种方法可以选择性下样本仅高分辨率图像? 解决方案 BitmapFactory.Options类中有一个选项(一个我忽略的),名为inJustDecodeBounds,javadoc,其中读取: 如果设置为true,解码器将 返回null(无位图),但是 出去...仍将设置字段, 允许呼叫者查询 位图无需分配 其像素的内存. 我用它来找出位图