我在main.xml中有一个Imageview,如何将位图设置为main.xml中的imageView我可以将位图分配给下面代码中的本地图像视图.
//Activates the Camera
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent, 1);
// get the bitmap data from the Camera
Bundle extras = data.getExtras();
Bitmap b = (Bitmap) extras.get("data");
int width = b.getWidth();
int height = b.getHeight();
ImageView img = new ImageView(this);
img.setImageBitmap(b);
//Saves the image
MediaStore.Images.Media.insertImage(getContentResolver(), b, timestamp, timestamp);
// Set the View
setContentView(img);
Run Code Online (Sandbox Code Playgroud) 我正在从像这样的资源加载位图:
Bitmap mBackground = BitmapFactory.decodeResource(res,R.drawable.image);
Run Code Online (Sandbox Code Playgroud)
我想要做的是在我的绘制方法中将它绘制到主画布之前对位图进行一些更改(因为当它不会改变时,在我的主循环中重复大量绘制似乎很浪费).我正在使用以下内容对位图进行更改:
Canvas c = new Canvas(mBackground);
c.drawARGB(...); // etc
Run Code Online (Sandbox Code Playgroud)
所以我自然会得到一个例外
java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor
Run Code Online (Sandbox Code Playgroud)
所以为了避免这种情况,我制作了位图的副本,以便它是可变的
Bitmap mBackground = BitmapFactory.decodeResource(res,R.drawable.image).copy(Bitmap.Config.ARGB_8888, true);
Run Code Online (Sandbox Code Playgroud)
哪个避免了问题,但它有时会导致OutOfMemoryExceptions,知道更好的方法来实现我想要的东西吗?
以下代码是我到目前为止所得到的.但是,有两个问题:
我想要内部和外部发光效果,看起来类似于Photoshop的混合选项.但我只设法制作外部发光,如果我设置BlurMaskFilter.Blur.INNER或其他值,整个图像被阻挡,而不是只是边缘.
尽管我将" FF " 设置为alpha值,但发光颜色仍然很暗.
Bitmap alpha = origin.extractAlpha();
BlurMaskFilter blurMaskFilter = new BlurMaskFilter(5, BlurMaskFilter.Blur.OUTER);
Paint paint = new Paint();
paint.setMaskFilter(blurMaskFilter);
paint.setColor(0xffffffff);
Canvas canvas = new Canvas(origin);
canvas.drawBitmap(alpha, 0, 0, paint);
return origin;
Run Code Online (Sandbox Code Playgroud)
我想将一组位图编码到h264中.这可以通过MediaEncoder吗?我已经编写了一些代码来执行此操作,但输出无法在我尝试过的任何媒体播放器中播放.这里是我主要从Stackoverflow上找到的其他来源借用的一些代码.
mMediaCodec = MediaCodec.createEncoderByType("video/avc");
mMediaFormat = MediaFormat.createVideoFormat("video/avc", 320, 240);
mMediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 125000);
mMediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
mMediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar);
mMediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
mMediaCodec.configure(mMediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mMediaCodec.start();
mInputBuffers = mMediaCodec.getInputBuffers();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); // image is the bitmap
byte[] input = byteArrayOutputStream.toByteArray();
int inputBufferIndex = mMediaCodec.dequeueInputBuffer(-1);
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = mInputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(input);
mMediaCodec.queueInputBuffer(inputBufferIndex, 0, input.length, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)
我应该调整什么?
我需要创建一个带有图层列表的drawable,使得背景图层是图像,前景是透明颜色.我能够做到这一点.我没有成功的地方是添加一些填充/边距,以便在它们底部显示一段图像,而顶部没有彩色图层.这是我的xml.谢谢你的帮助.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<bitmap android:src="@drawable/img1"
/>
</item>
<item>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="@color/color1" />
<padding android:bottom="20dp" />
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
由于此配置不起作用,我的猜测是将填充放在第一层.但我不知道如何用位图做到这一点
我想实现一个图像编辑程序,但我无法在WPF中显示Bitmap.对于一般编辑,我需要一个位图.但是我无法在图像中显示它.
private void MenuItemOpen_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openfiledialog = new OpenFileDialog();
openfiledialog.Title = "Open Image";
openfiledialog.Filter = "Image File|*.bmp; *.gif; *.jpg; *.jpeg; *.png;";
if (openfiledialog.ShowDialog() == true)
{
image = new Bitmap(openfiledialog.FileName);
}
}
Run Code Online (Sandbox Code Playgroud)
我将带有OpenFileDialog的Image加载到Bitmap中.现在我想在我的WPF中设置图片.像这样:
Image.Source = image;
Run Code Online (Sandbox Code Playgroud)
我真的需要一个Bitmap来获得特殊像素的颜色!我需要一个简单的代码剪切.
谢谢您的帮助!
我有这个代码
private void saveImage()
{
Bitmap bmp1 = new Bitmap(pictureBox.Image);
bmp1.Save("c:\\t.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
// Dispose of the image files.
bmp1.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
我已经在我的驱动器"c:\"上有一个图像t.jpg.
我希望每次程序运行时都用新图像替换它.但是GDI +错误显示
我怎么能解决它?
在某个点击事件中,我要求用户添加图像.所以我提供两种选择:
我的目标是保留与这些图像相关的"uri"列表.
如果用户选择了图库,那么我会得到图像uri(这非常简单).但如果他选择相机,那么在拍完照片之后,我就会得到那张照片的Bitmap对象.
现在我如何将该Bitmap对象转换为uri,或者换句话说,如何获取该位图对象的相对Uri对象?
谢谢.
如果有人能够确认我已正确解决了以下问题或者是否有替代解决方案,我将非常感激?
我有一个应用程序将大图像(例如800*1720像素)加载到内存中并以滚动视图显示它.图像是博物馆的平面图,我想要一个简单的地图,如滚动和缩放的体验.图像在旧设备上正常加载,但在三星Galaxy S3上导致内存不足错误.
看看LogCat消息,结果发现在创建位图时,22MB正在为位图而不是800*1720*4 = 5.5MB进行分配.基本上按其他设备的要求分配了4倍的内存,并将内存使用量推到50MB堆大小.
此问题的推荐解决方案是使用该BitmapFactory.Options.inSampleSize选项来降低加载的图像的分辨率并使其需要更少的内存.但是,这会降低图像的质量,我实际上希望以原始质量显示它的全尺寸,因为在旧设备上工作正常.
经过多次刮擦后我得出结论,问题是S3的WXGA屏幕上的像素密度是2.0,因此对于图像中的每个像素,位图实际上分配了4个像素.通过一些试验和错误,我发现我可以通过设置来防止这种情况发生options.inScaled = false;
http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inScaled
在途中,我还意识到我可以通过设置使用2像素而不是4像素的低保真色彩深度将我的内存使用量减半到2.7MB options.inPreferredConfig = Bitmap.Config.RGB_565;.对于我的地板,这不会影响可见的图像质量.
最终的代码是这样的:
String uri = "drawable/floorplan";
int imageResource = getResources().getIdentifier(uri, null, getPackageName());
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;
options.inScaled = false;
Bitmap bm = BitmapFactory.decodeResource(getResources(), imageResource, options);
IVfloorplan.setImageBitmap(bm);
Run Code Online (Sandbox Code Playgroud)
显示此位图时,您需要将其缩放.要计算缩放比例,您可以从以下位置获取像素密度:
float density = getResources().getDisplayMetrics().density;
Run Code Online (Sandbox Code Playgroud)
我将位图的内存使用量从22MB减少到2.7MB,这在50MB堆中非常重要.
我一直有这个问题,我不知道该怎么办.
我已经使用了这个库,当我得到裁剪后的图像时,我将它保存在一个静态变量中并转到下一个活动.当我到达下一个活动时,我引用该静态变量来获取位图并尝试将其缩小.但它给了我错误.
这就是我在做什么.
public void buttonCropClick(View view) throws IOException
{
imageView.setDrawingCacheEnabled(true);
imageView.buildDrawingCache(true);
Snapshot.CroppedBitmap = imageView.getDrawingCache(true);
imageView.setDrawingCacheEnabled(false);
startActivity(new Intent(this,RecommendationInfo.class));
}
Run Code Online (Sandbox Code Playgroud)
在RecommendationInfo类中,我得到以下行中的位图Snapshot.CroppedBitmap = imageView.getDrawingCache(true);然后我将此位图保存在我在下一个活动中引用的静态变量中并将其传递给以下函数.
public static Bitmap scaleDown(Bitmap realImage,boolean filter) {
float maxImageSize = HeightToSet;
float ratio = Math.min(
(float) maxImageSize / realImage.getWidth(),
(float) maxImageSize / realImage.getHeight());
int width = Math.round((float) ratio * realImage.getWidth());
int height = Math.round((float) ratio * realImage.getHeight());
// Error here
Bitmap newBitmap = Bitmap.createScaledBitmap(realImage, width,height, filter);
return newBitmap;
}
Run Code Online (Sandbox Code Playgroud)
我已经试过打电话了bitmap.recycle().为什么我遇到这个问题我该怎么做才能解决它?这是我的logcat. …