【发布时间】:2011-10-20 21:14:31
【问题描述】:
如何将位图左侧的 10 行全部设置为白色? 我有一个必须在左侧填充的位图。我想我可以在旧的 getpixel 上为每个位置创建一个新的图像,并在新的一个(白色或彩色)上设置像素而不是返回新的位图......这是错的吗? 有什么建议吗?非常感谢!
【问题讨论】:
标签: java android colors bitmap padding
如何将位图左侧的 10 行全部设置为白色? 我有一个必须在左侧填充的位图。我想我可以在旧的 getpixel 上为每个位置创建一个新的图像,并在新的一个(白色或彩色)上设置像素而不是返回新的位图......这是错的吗? 有什么建议吗?非常感谢!
【问题讨论】:
标签: java android colors bitmap padding
我这样做只是为了从各个方面进行填充。希望它会帮助某人。 https://stackoverflow.com/a/44060669/6480433 & https://stackoverflow.com/a/6957333/6480433 这些答案的组合。
Bitmap outputimage = Bitmap.createBitmap(Src.getWidth() + padding_x,Src.getHeight() + padding_y, Bitmap.Config.ARGB_8888);
Canvas can = new Canvas(outputimage);
can.drawBitmap(Src, padding_x, padding_y, null);
Bitmap output = Bitmap.createBitmap(outputimage.getWidth()+padding_x, outputimage.getHeight() + padding_y, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output);
canvas.drawBitmap(outputimage, 0, 0, null);
return output;
【讨论】:
这是一个使用 RxJava 的 kotlin 扩展函数来完成它。我还没有完全测试,但基于结合以前的答案得到一些东西
fun Bitmap.pad(top: Float = 0F, bottom: Float = 0F, left: Float = 0F, right: Float = 0F): Single<Bitmap> {
return Single.create<Bitmap> { emitter ->
val output = Bitmap.createBitmap(
(width + left + right).toInt(),
(height + top + bottom).toInt(),
Bitmap.Config.ARGB_8888
)
val canvas = Canvas(output)
canvas.drawBitmap(this, left, top, null)
emitter.onSuccess(output)
}.subscribeOn(Schedulers.computation())
}
我认为协程版本只是
suspend fun Bitmap.pad(top: Float = 0F, bottom: Float = 0F, left: Float = 0F, right: Float = 0F): Bitmap {
val output = Bitmap.createBitmap(
(width + left + right).toInt(),
(height + top + bottom).toInt(),
Bitmap.Config.ARGB_8888
)
val canvas = Canvas(output)
canvas.drawBitmap(this, left, top, null)
return output
}
【讨论】:
public Bitmap addPaddingTopForBitmap(Bitmap bitmap, int paddingTop) {
Bitmap outputBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight() + paddingTop, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(outputBitmap);
canvas.drawColor(Color.RED);
canvas.drawBitmap(bitmap, 0, paddingTop, null);
return outputBitmap;
}
public Bitmap addPaddingBottomForBitmap(Bitmap bitmap, int paddingBottom) {
Bitmap outputBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight() + paddingBottom, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(outputBitmap);
canvas.drawColor(Color.RED);
canvas.drawBitmap(bitmap, 0, 0, null);
return outputBitmap;
}
public Bitmap addPaddingRightForBitmap(Bitmap bitmap, int paddingRight) {
Bitmap outputBitmap = Bitmap.createBitmap(bitmap.getWidth() + paddingRight, bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(outputBitmap);
canvas.drawColor(Color.RED);
canvas.drawBitmap(bitmap, 0, 0, null);
return outputBitmap;
}
public Bitmap addPaddingLeftForBitmap(Bitmap bitmap, int paddingLeft) {
Bitmap outputBitmap = Bitmap.createBitmap(bitmap.getWidth() + paddingLeft, bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(outputBitmap);
canvas.drawColor(Color.RED);
canvas.drawBitmap(bitmap, paddingLeft, 0, null);
return outputBitmap;
}
【讨论】:
您可以改为创建具有额外填充像素数的新位图。 将此设置为画布位图并使用所需颜色为整个图像着色,然后复制您的位图。
public Bitmap pad(Bitmap Src, int padding_x, int padding_y) {
Bitmap outputimage = Bitmap.createBitmap(Src.getWidth() + padding_x,Src.getHeight() + padding_y, Bitmap.Config.ARGB_8888);
Canvas can = new Canvas(outputimage);
can.drawARGB(FF,FF,FF,FF); //This represents White color
can.drawBitmap(Src, padding_x, padding_y, null);
return outputimage;
}
【讨论】:
你可能想看看这里:
http://download.oracle.com/javase/1.4.2/docs/api/java/awt/image/BufferedImage.html
您可能想要使用的方法是:getHeight() 然后您知道要设置多少像素并在 10 列上进行迭代
和setRGB(int x, int y, int RGB)设置像素
【讨论】: