我已经生成了测试条形码图片,
我在本地保存并尝试使用简单的java程序加载它并打印出第一个扫描行,如下所示:
File bmpFile = new File("barcode.bmp");
BufferedImage img;
try {
img = ImageIO.read(bmpFile);
int[] pixels = img.getRGB(0, 0, img.getWidth(), img.getHeight(), null, 0, img.getWidth());
int w = img.getWidth();
for (int i = 0; i< w; i++) {
System.out.print(pixels[i]+", ");
}
System.out.println();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
然后我尝试使用以下代码
在模拟器上的Android应用中加载位图Bitmap barcode = BitmapFactory.decodeResource(context.getResources(), R.raw.barcode);
Config cfg = globe.getConfig();
int w = barcode.getWidth();
for (int i = 0; i < w; i++) {
int color = barcode.getPixel(i, 0);
System.out.print(color+", ");
}
System.out.println();
令人难以置信的是,这两个简单的应用程序必须完全不同的扫描线数据。
来自Java程序的扫描线数据:
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-16777216,-16777216,-1,-16777216,-1,-1 ,-16777216,-1,-1,-1,-1,-16777216,-16777216,-1,-1,-1,-16777216,-1,-1,-1,-16777216,-1, - 16777216,-1,-16777216,-16777216,-1,-1,-1,-16777216,-1,-1,-1,-16777216,-16777216,-16777216,-1,-1,-16777216, -1,-1,-16777216,-16777216,-1,-16777216,-1,-1,-1,-16777216,-16777216,-16777216,-16777216,-1,-16777216,-1,-16777216 ,-1,-16777216,-16777216,-16777216,-1,-16777216,-16777216,-16777216,-16777216,-1,-16777216,-16777216,-1,-1,-16777216,-16777216, - 1,-16777216,-16777216,-1,-1,-16777216,-16777216,-16777216,-1,-16777216,-16777216,-1,-16777216,-16777216,-16777216,-1,-16777216, -1,-16777216,-16777216,-16777216,-1,-16777216,-16777216,-1,-1,-1,-16777216,-1,-1,-1,-1,-16777216,-1 ,-16777216,-16777216,-1,-1,-16777216,-16777216,-1,-16777216,-16777216,-1,-16777216,-16777216,-16777216,-16777216,-1,-16777216, - 1,-16777216, -16777216,-1,-1,-1,-16777216,-1,-1,-1,-16777216,-16777216,-1,-1,-1,-16777216,-16777216,-16777216,-1 ,-16777216,-1,-16777216,-16777216,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
来自Android应用的扫描线数据:
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2170914,-13026247 ,-16777216,-15197160,-4342083,-7565684,-15197160,-4342083,-1,-2170914,-13026247,-9736853,-1,-1,-1,-1,-1,-7565684, - 16777216,-16777216,-9736853,-1,-1,-1,-1052689,-13026247,-9736853,-1,-1,-1,-1052689,-13026247,-10855078,-1052689,-13026247, -10855078,-1052689,-13026247,-16777216,-16249848,-4342083,-1,-1,-1,-6512996,-16249848,-4342083,-1,-1,-1,-6512996,-16777216 ,-16777216,-16777216,-16249848,-5394771,-1,-1052689,-11907766,-10855078,-1,-1,-6512996,-16777216,-16777216,-10855078,-1,-11907766, - 10855078,-1,-1,-1,-1,-11907766,-16777216,-16777216,-16777216,-16777216,-16777216,-5394771,-5394771,-16777216,-5394771,-5394771,-16777216, -5394771,-5394771,-16777216,-16777216,-16777216,-16777216,-5394771,-5394771,-16777216,-16777216,-16777216,-16777216,-16777216,-11907766,-1,-10855078,-16777216 ,-16777216,-6512996,-1,-1,-108550 78,-16777216,-16777216,-6512996,-5394771,-16249848,-16777216,-11907766,-1052689,-1,-5394771,-16249848,-16777216,-16777216,-16777216,-6512996,-5394771, -16249848,-16777216,-13026247,-1052689,-10855078,-16777216,-16777216,-16777216,-13026247,-1052689,-10855078,-13026247,-1052689,-10855078,-16777216,-16777216,-16777216 ,-13026247,-1052689,-9736853,-16777216,-16777216,-7565684,-1,-1,-1,-4342083,-16249848,-7565684,-1,-1,-1,-1, - 1,-9736853,-13026247,-2170914,-9736853,-16777216,-16777216,-7565684,-1,-1,-9736853,-16777216,-16777216,-7565684,-4342083,-15197160,-16777216, -14078935,-2170914,-9736853,-16777216,-16777216,-16777216,-16777216,-16777216,-7565684,-3223602,-15197160,-7565684,-3223602,-15197160,-16777216,-14078935,-2170914 ,-1,-1,-1,-8684165,-14078935,-2170914,-1,-1,-1,-8684165,-16777216,-16777216,-8684165,-1,-1,-1, - 3223602,-14078935,-16777216,-16777216,-16777216,-8684165,-3223602,-1407 8935,-8684165,-3223602,-14078935,-16777216,-15197160,-3223602,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,
在我看来,java程序的扫描线数据更合理。在Android应用中,我尝试将位图放在 res / drawable / 和 res / raw / 下,但是,返回相同的扫描线数据。有人可以告诉我这是怎么发生的吗?
答案 0 :(得分:1)
要更改图像类型,可以使用以下代码。代码经过测试。
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap mBitmap = BitmapFactory.decodeFile(imagePath, opt);
但这没有用。我在JDK和Android上有不同数字(来自getPixel和getRGB)的类似问题。
但是,我的代码是在客户端(android)和服务器(JDK)上计算直方图。然后他们必须进行比较。
问题解决了吗?
UPD。当时的问题是JPG格式。
答案 1 :(得分:1)
您是否从drawables文件夹中加载位图?我有一个问题,在某些设备上,在这种情况下位图会稍微改变。我通过将位图资源放在原始文件夹
中解决了这个问题答案 2 :(得分:0)
看起来你正在565中加载位图。将一个BitmapFactory.Options传递给decode()并在ARGB_8888中强制解码。