`
wayfarer
  • 浏览: 297840 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

android加载网络图片(逐行扫描格式png图片)的一个bug

阅读更多

android加载网络图片有一个bug,至少目前我在android1.5.jar中没有找到解决方案。

昨天关于jpg、gif和png的帖子已经提到,png是支持interlaced的。j2me、symbian、wm和iphone在网络加载interlaced格式的png时没有出现问题,但是android在网络加载interlaced格式的png时就会出现图像模糊不清的现象(根据interlaced原理,再经过观察,我估计是只扫描了奇数行而没有扫描偶数行,所以出现了图像模糊的状况)。

 

android网络加载图片的方式有两种:(1)用HttpURLConnection取得InputStream,再用InputStream流作为参数,利用android提供的api生成图片。(2)用HttpClick(apche的一个开源项目,被引用到android中了),取得图片流的byte[]信息,然后以byte[]作为参数生成图片。前文已有论述,遂不赘述。现只将实际图片贴上来以说明这个bug,希望做android底层开发的兄弟姐妹们能尽快帮忙修复这个bug。

 

1. interlaced格式图片

 

2. none interlaced格式图片

 

 

Bug-Report: Interlaced PNG bitmap acquired through network is blurred
    I was trying to acquire interlaced PNG bitmap through network, there is no warn or errer in resulting output, but this interlaced PNG bitmap acquired from network is blurred, very blurred.
    If the interlaced PNG is acquired from native(res/drawable), it is distinct;
    If the PNG bitmap is not interlaced, load it from either network or native, it is distinct.
    I think the reason is: android just scan odd-numbered or even-numbered rows of the interlaced PNG, but doesn't scan scan even-numbered or odd-numbered rows of the interlaced PNG

Main Codes:

public void surfaceCreated(SurfaceHolder holder) {
	canvas = mHolder.lockCanvas();  
	Paint mPaint = new Paint();  
	try {
		String strURL = "http://www.tiexin.com/images/map_blocks/1/4/3/3/00000037_00000031.png";
		canvas.drawBitmap(getBitmap(strURL), 0, 0, mPaint);
	} catch (IOException e) {
		e.printStackTrace();
	}
}  
   
private Bitmap getBitmap(String strURL) throws IOException {
	URL url = new URL(strURL);
	HttpURLConnection conn = (HttpURLConnection) url.openConnection();
	conn.setDoInput(true);
	conn.setConnectTimeout(1000);
	conn.setRequestMethod("GET");
	conn.connect();
	for (int i = 0; i < 5; i++) { // 连接5次
		if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
			InputStream is = conn.getInputStream();
			Bitmap bm = BitmapFactory.decodeStream(is, null, null);
			if (is != null) {
				is.close();
				is = null;
			}
			if (conn != null) {
				conn.disconnect();
				conn = null;
			}
			return bm;
		}
	}
	return null;
}

Welcome to visit my blog to see the effect drawing
http://wayfarer.iteye.com/admin/blogs/442586

  • 大小: 86.4 KB
  • 大小: 86.1 KB
0
0
分享到:
评论
1 楼 wayfarer 2009-08-11  
http://code.google.com/p/android/issues/detail?id=3521

相关推荐

    浅析隔行扫描与逐行扫描

    逐行扫描则是指从上到下逐行扫描整个图像,不断扫描每一行,直到完成整个图像。 隔行扫描的优点是可以减少信道带宽,提高信道利用率,适合电视信号的发送和接收。然而,它也存在一些缺点,如行间闪烁效应、并行现象...

    逐行扫描与隔行扫描技术说明

    隔行扫描是一种将一帧图像分成两个场进行扫描的技术,第一个场只包含奇数行(如第1行、第3行等),第二个场则只包含偶数行(如第2行、第4行等)。每个场都需要单独扫描一次,这意味着完整的一帧图像需要两次扫描才能...

    51单片机系列教程之【实验12】矩阵按键识别之逐行扫描法.rar

    当一个行线被拉低时,如果对应列线上有按键被按下,该列线的电平将被拉低,否则保持高电平。 3. **按键识别**:通过比较扫描前后的列线状态变化,可以判断出哪个按键被按下。例如,如果第1行第3列的按键被按下,在...

    西门子逐行扫描型材光学测量系统简介.pdf

    对于金属加工企业来说,逐行扫描型材光学测量系统不仅仅是一个测量工具,它还是提高产品一致性和质量水平的关键。通过与自动化生产线的集成,系统可以实现对产品质量的全面控制,为企业的市场竞争力提供有力的技术...

    嵌入式+stm32+逐行扫描法stm32key.c

    逐行扫描法

    键盘4x4逐行扫描

    逐行扫描键盘输入数码管显示相应数值并保持,有很强的移植性。

    逐行扫描与隔行扫描大解析

    - **技术兼容性:**数字电视和网络视频传输格式多采用逐行扫描模式,使得逐行扫描在技术层面上更具兼容性。 #### 六、结论 综上所述,虽然隔行扫描在早期电视制式中占据主导地位,但随着技术的发展,逐行扫描凭借...

    轮廓提取逐行扫描的算法

    在这个特定的算法中,我们看到一个基于C语言实现的逐行扫描方法,用于从二值图像(黑白色)中提取轮廓。这个算法的核心在于遍历图像的每一行,寻找黑色像素点并记录它们的位置。 1. **初始化**: 在函数`lunkuotiqu...

    51单片机04矩阵按键逐行扫描,行列扫描代码文.pdf

    当低四位接收到的数据不全为1时,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。 在代码实现中,我们可以使用以下代码来实现逐行扫描: ```c void keydown() { unsigned char n = 0,...

    逐行扫描音视产品的技术要点

    在音视产品领域,逐行扫描技术是一种至关重要的显示技术,它对图像质量和用户体验有着显著影响。逐行扫描,顾名思义,是指图像数据按照从上至下、逐行显示的方式进行,与传统的隔行扫描形成鲜明对比。在本文中,我们...

    逐行隔行扫描的超详细讲解.pdf

    逐行扫描和隔行扫描是两种不同的扫描方式,逐行扫描可以得到比隔行扫描更高的图像质量,但隔行扫描在模拟电视时代是一个用有限频带资源实现优化显示效果的最佳折衷选择,而在数字电视时代,逐行扫描已经成为数字电视...

    逐行扫描与隔行扫描技术说明文.pdf

    视频压缩和传输过程中,隔行扫描常常面临一个叫做“3:2 pulldown”或“2:2 pulldown”的技术处理问题,它主要用于将电影的24帧每秒转换为NTSC电视的29.97帧每秒,以及PAL制式的25帧每秒。这种转换过程中,相邻的两帧...

    delphi 图像识别技术(逐行扫描识别)

    本文档详细介绍了Delphi环境下实现图像识别的一种技术——逐行扫描识别,并通过具体的源代码实例来展示这一技术的应用场景与实现过程。该技术主要用于识别特定图像中的数字,如电表读数等。 #### 技术要点 1. **...

    VB远程屏幕逐行扫描对比算法V1-解决锯齿.rar

    在实际应用中,这种技术可能会遇到一个常见问题,即“锯齿”现象,这会影响屏幕图像的清晰度和质量。"VB远程屏幕逐行扫描对比算法V1-解决锯齿.rar"这个压缩包正是为了解决这个问题而提供的。 锯齿现象通常是由于...

    51单片机点阵屏逐行扫描程序.zip

    这个“51单片机点阵屏逐行扫描程序.zip”压缩包包含了一个针对51单片机的点阵显示屏控制程序,用于实现逐行扫描显示功能。点阵屏通常用于简单的文本或图形显示,比如早期的电子表、计算器或一些工业设备的用户界面。...

    Android 逐行写入和读取文本文件Demo

    这两个方法都需要一个文件名参数,并返回一个`FileOutputStream`或`FileInputStream`对象,用于进行实际的数据读写。 **写入文本文件** 写入文本文件通常涉及使用`BufferedWriter`或`PrintWriter`。以下是一个简单...

    android 逐行显示自动换行的textview

    要实现逐行逐字显示的功能,我们可以创建一个自定义的TextView子类,重写`onDraw()`方法来控制文本的绘制过程。在这个方法里,我们可以控制文本的显示速度,每次只绘制一行或一个字符。此外,还需要维护一个内部状态...

    android 中读取较大的TXT文件

    `BufferedReader`的构造函数接受一个`InputStreamReader`,用于指定字符编码(这里是UTF-8),以及一个缓冲区大小,8192字节是一个合理的默认值,但根据实际情况可以调整。 在处理大文件时,我们还需要考虑线程管理...

    VB非兼容位图远程屏幕逐行扫描算法(对比版)

    通过这些文件,开发者可能已经实现了一个可调整频率的屏幕扫描程序,它可以比较连续的屏幕快照,只传输有变化的部分。这不仅提高了效率,也减轻了服务器和客户端的负担。在实际应用中,这样的算法对于远程桌面服务、...

    基于FPGA的矩阵键盘的逐行扫描+行列切换

    1. **矩阵键盘结构**:矩阵键盘的每个按键对应行线和列线的一个交叉点。例如,在4x4矩阵键盘中,有4行(R0-R3)和4列(C0-C3),总共可以提供16个按键接口。 2. **逐行扫描**:在FPGA程序中,通过循环控制行线,...

Global site tag (gtag.js) - Google Analytics