我有一个关于Android中位图的问题:我有一个带有白色边距[大小未知]的位图.是否可以创建一个删除了所有白色边距的新位图(矩形)?
Bitmap bmp = Bitmap.createBitmap(wIDth, bmpheigth, Config.ARGB_8888); Canvas canvas = new Canvas(bmp); canvas.setBitmap(bmp); canvas.drawcolor(color.WHITE);// draw here things!
人们认为不知道绘画的地方.
有什么好办法呢?
谢谢!
解决方法:
谢谢@Maxim Efimov& @StackOverflowException
以防万一有人需要一个代码片段来解决这类问题:
此方法返回一个删除了边距的剪切较小的Bitmap.首先将像素传递给int数组,然后使用数组比Bitmap.getPixel方法快一点
只需调用指示源位图和背景颜色的方法.
Bitmap bmp2 = removemargins(bmp, color.WHITE);private static Bitmap removemargins2(Bitmap bmp, int color) { // Todo auto-generated method stub long dtMili = System.currentTimeMillis(); int Mtop = 0, MBot = 0, Mleft = 0, MRight = 0; boolean found1 = false, found2 = false; int[] bmpIn = new int[bmp.getWIDth() * bmp.getHeight()]; int[][] bmpInt = new int[bmp.getWIDth()][bmp.getHeight()]; bmp.getPixels(bmpIn, 0, bmp.getWIDth(), 0, 0, bmp.getWIDth(), bmp.getHeight()); for (int ii = 0, contX = 0, contY = 0; ii < bmpIn.length; ii++) { bmpInt[contX][contY] = bmpIn[ii]; contX++; if (contX >= bmp.getWIDth()) { contX = 0; contY++; if (contY >= bmp.getHeight()) { break; } } } for (int hP = 0; hP < bmpInt[0].length && !found2; hP++) { // looking for Mtop for (int wP = 0; wP < bmpInt.length && !found2; wP++) { if (bmpInt[wP][hP] != color) { Log.e("Mtop 2", "Pixel found @" + hP); Mtop = hP; found2 = true; break; } } } found2 = false; for (int hP = bmpInt[0].length - 1; hP >= 0 && !found2; hP--) { // looking for MBot for (int wP = 0; wP < bmpInt.length && !found2; wP++) { if (bmpInt[wP][hP] != color) { Log.e("MBot 2", "Pixel found @" + hP); MBot = bmp.getHeight() - hP; found2 = true; break; } } } found2 = false; for (int wP = 0; wP < bmpInt.length && !found2; wP++) { // looking for Mleft for (int hP = 0; hP < bmpInt[0].length && !found2; hP++) { if (bmpInt[wP][hP] != color) { Log.e("Mleft 2", "Pixel found @" + wP); Mleft = wP; found2 = true; break; } } } found2 = false; for (int wP = bmpInt.length - 1; wP >= 0 && !found2; wP--) { // looking for MRight for (int hP = 0; hP < bmpInt[0].length && !found2; hP++) { if (bmpInt[wP][hP] != color) { Log.e("MRight 2", "Pixel found @" + wP); MRight = bmp.getWIDth() - wP; found2 = true; break; } } } found2 = false; int sizeY = bmp.getHeight() - MBot - Mtop, sizeX = bmp.getWIDth() - MRight - Mleft; Bitmap bmp2 = Bitmap.createBitmap(bmp, Mleft, Mtop, sizeX, sizeY); dtMili = (System.currentTimeMillis() - dtMili); Log.e("margin 2", "Time needed " + dtMili + "mSec\nh:" + bmp.getWIDth() + "w:" + bmp.getHeight() + "\narray x:" + bmpInt.length + "y:" + bmpInt[0].length); return bmp2;}
总结 以上是内存溢出为你收集整理的Android Bitmap删除白边全部内容,希望文章能够帮你解决Android Bitmap删除白边所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)