基本上,我有一个矩形位图,并希望创建一个新的正方形尺寸的位图,其中将包含其中的矩形位图。
因此,例如,如果源位图的宽度:100和高度:400,我想要一个宽度:400和高度:400的新位图。然后,绘制以这个新位图为中心的源位图(请参阅附加图像以更好地理解)。
我下面的代码很好地创建了方形位图,但没有将源位图绘制到其中。结果,我留下了一个完全黑色的位图。
这是代码:
Bitmap sourceBitmap = BitmapFactory.decodeFile(sourcePath);
Bitmap resultBitmap= Bitmap.createBitmap(sourceBitmap.getHeight(), sourceBitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(resultBitmap);
Rect sourceRect = new Rect(0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight());
Rect destinationRect = new Rect((resultBitmap.getWidth() - sourceBitmap.getWidth())/2, 0, (resultBitmap.getWidth() + sourceBitmap.getWidth())/2, sourceBitmap.getHeight());
c.drawBitmap(resultBitmap, sourceRect, destinationRect, null);
// save to file
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyApp");
File file = new File(mediaStorageDir.getPath() + File.separator + "result.jpg");
try {
result.compress(CompressFormat.JPEG, 100, new FileOutputStream(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
知道我哪里做错了吗?
哎呀,刚刚意识到问题是什么。我在Canvas
上绘制了错误的位图
。如果将来它对任何人有帮助,请记住Canvas已经附加并将绘制到您在其构造函数中指定的位图。所以基本上:
这:
c.drawBitmap(resultBitmap, sourceRect, destinationRect, null);
实际上应该是:
c.drawBitmap(sourceBitmap, sourceRect, destinationRect, null);
试试这个:
private static Bitmap createSquaredBitmap(Bitmap srcBmp) {
int dim = Math.max(srcBmp.getWidth(), srcBmp.getHeight());
Bitmap dstBmp = Bitmap.createBitmap(dim, dim, Config.ARGB_8888);
Canvas canvas = new Canvas(dstBmp);
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(srcBmp, (dim - srcBmp.getWidth()) / 2, (dim - srcBmp.getHeight()) / 2, null);
return dstBmp;
}
问题内容: 我有一个位图,我想从该位图裁剪一个圆形区域。圆外的所有像素均应透明。我怎样才能做到这一点? 问题答案: 经过长时间的头脑风暴,我找到了解决方案
我需要通过给定的背景色键为位图计算一个闭合裁剪矩形。在下面的图片中,你可以看到什么是关闭作物。左边是源,右边是关闭作物的输出: 正如你所看到的,我需要找到与背景颜色不同的最上面、最左边、最下面和最右边的像素来构建关闭裁剪矩形。那么,如何找到那些不同的外部像素来得到接近的裁剪矩形呢?或者,换句话说,如何计算位图的闭合裁剪矩形?
想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。 我有一个关于Java的问题,因为我了解不来用Java绘制几何图形,下面的代码你能帮我吗? 这是代码: 如何创建三角形、正方形和矩形的JFrame?更正我的代码谢谢
我正在创建一个脉搏监测应用程序。我收到了文本视图中显示的实时脉冲数据。如何从Textview中显示的数据创建实时图形?我正在使用android graphview创建图形。 谢谢
我刚刚意识到,如果我只对包含文本的区域执行OCR处理,它会快得多。因此,我所做的是检测图像中的文本区域,然后对每个区域进行OCR处理。这是使用OpenCV“检测文本区域”步骤的结果(我用它在图像上绘制矩形): 唯一的问题是我不能把文本结果按照它们出现在原始图像上的顺序排列。在这种情况下,应该是: 基本上是任何其他有文字的图像。 这是OCR过程(使用Tesseract):
此外,我已经把我的矩形在锚窗,如果这是重要的知道。