我想将某些URL中的图像动态添加到线性布局中.运行该段代码时出现错误无法启动活动
ComponentInfo:位于com.example的com.example.star.example.CompampleActivity.insertPhoto(CompinfoActivity.java:50)的com.example.star.example.CompinfoActivity.getBitmapFromURL(CompinfoActivity.java:70)中的android.os.NetworkOnMainThreadException. star.example.CompinfoActivity.onCreate(CompinfoActivity.java:38)
请帮忙.这是我下面活动的代码.
public class CompinfoActivity extends AppCompatActivity {
Dialog dialog;
LinearLayout myGallery;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_compinfo);
dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.activity_compinfopopup);
dialog.getWindow().getAttributes().width = AbsListView.LayoutParams.MATCH_PARENT;
dialog.getWindow().getAttributes().height = AbsListView.LayoutParams.WRAP_CONTENT;
dialog.show();
myGallery = (LinearLayout) dialog.findViewById(R.id.mygallery);
myGallery.addView(insertPhoto("http://example.com/a.png"));
myGallery.addView(insertPhoto("http://example.com/b.png"));
myGallery.addView(insertPhoto("http://example.com/c.png"));
myGallery.addView(insertPhoto("http://example.com/d.png"));
new MyTask().execute();
}
View insertPhoto(String path){
Bitmap bm;
bm = getBitmapFromURL(path);
LinearLayout layout = new LinearLayout(getApplicationContext());
layout.setLayoutParams(new AbsListView.LayoutParams(250, 250));
layout.setGravity(Gravity.CENTER);
ImageView imageView = new ImageView(getApplicationContext());
imageView.setLayoutParams(new AbsListView.LayoutParams(220, 220));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setImageBitmap(bm);
layout.addView(imageView);
return layout;
}
public static Bitmap …Run Code Online (Sandbox Code Playgroud) **注意:(对于书呆子)请勿将其标记为重复的问题.
NullPointerException.view.getDrawingCache从Stackoverflow返回null答案.我正在尝试单独为平板电脑开发绘图应用程序.我创建了一个用于绘图的自定义视图.自定义视图包含在内部ScrollView以使用户滚动图像(如果它太大).
activity_drawing.xml
<RelativeLayout
android:id="@+id/container"
android:layout_marginLeft="@dimen/activity_correction_answer_horizontal_margin"
android:layout_marginRight="@dimen/activity_correction_answer_horizontal_margin"
android:layout_width="match_parent"
android:layout_height="match_parent">
<in.com.hourglass.views.ImageScroll
android:layout_centerInParent="true"
android:id="@+id/image_scroll"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<in.com.hourglass.views.DrawView
android:id="@+id/draw_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</FrameLayout>
</in.com.hourglass.views.ImageScroll>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
因此,当完成视图上的绘图时,用户可以保存图像并进行思考Canvas.
我正在调整图像大小并将其附加到自定义视图Bitmap,并将它们保存为单个图像.整个过程很好用三星平板电脑10.1.
但是当我尝试在较低屏幕设备samsung Note 8.0中测试相同的时候.view.getDrawingCache()给我一个空的Bitmap.
我已经调试并检查了自定义视图的宽度和高度,它们指定了宽度和高度的scrollview,并且customview中也有一个位图.
我Bitmap尽可能地重用以减少app堆内存使用量.
我知道,我必须对此警告采取措施:
W/View: View too large to fit into drawing cache, needs 4380332 bytes, only 4096000 available
Run Code Online (Sandbox Code Playgroud)
错误日志:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: …Run Code Online (Sandbox Code Playgroud) 我需要异步操作位图像素.有Bitmap和WriteableBitmap.我需要这样的东西:
public async Task<Bitmap> ProcessBitmap(Bitmap bitmap)
{
// operate on bitmap asynchronously
return newBitmap;
}
Run Code Online (Sandbox Code Playgroud)
我想使用WriteableBitmap并将其转换为流并使用流异步方法,但PixelBuffer属性在WPF和WinForms中似乎都不可用.我该怎么做?我也可以在某些情况下使用Parallel.For但是如何获得结果呢?
我有一个活动中的位图列表,我通过异步方法.现在我需要将我的位图列表传递给另一个活动.
这是我试过的代码,但给了我一个错误......
List<Bitmap> result = bitmapResult
Intent intent = new Intent(PhotoList.this,ImageSlider.class);
intent.putExtra("bitmapList", result);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
它给了我一个错误.
Cannot resolve method 'putExtra(java.lang.String, java.util.List<android.graphics.Bitmap>)'
Run Code Online (Sandbox Code Playgroud)
这样做的最佳做法是什么?我如何从新活动中检索List?
提前致谢.
我正在使用ADB截取android设备的屏幕截图,并将屏幕截图作为原始字节数据接收。
我知道通过的原始字节数据的格式为rgba
红色为偏移量0,绿色为偏移量8,蓝色为偏移量16,Alpha偏移量为24,每个值为1个字节。这构成了整个字节数组。
我正在尝试将此字节数组转换为C#中的位图,并且在大多数情况下都可以正常工作,除了看起来带有“蓝色调”的事实外,图像在各个方面看起来都是正确的-着色已关闭。
以下是我用来转换原始字节数据的代码:
int WriteBitmapFile(string filename, int width, int height, byte[] imageData)
{
using (var stream = new MemoryStream(imageData))
using (var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb))
{
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0,
bmp.Width,
bmp.Height),
ImageLockMode.WriteOnly,
bmp.PixelFormat);
IntPtr pNative = bmpData.Scan0;
Marshal.Copy(imageData, 0, pNative, imageData.Length);
bmp.UnlockBits(bmpData);
bmp.Save(filename);
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我在这篇文章中读到,这可能与实际rgba值的字节顺序有关。如您在上面的代码中看到的,我尝试将bmpData.Scan0强制转换为int *,但它仍然带有蓝色调。
我为现在可以做的事情以正确的颜色使图像动摇不已。我假设它读取的是红色的蓝色和蓝色的红色,反之亦然。
我以为我可以操纵原始字节数据,以便在将其转换为位图时按正确的字节顺序进行操作,但是我不确定该如何去做。
有什么建议么?
所以我有以下布局叫做demo_text.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/screen">
<TextView
android:id="@+id/textToDisplay"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Hello World"
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
我想将此demo_text转换为Bitmap.这是我的onCreate:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View inflatedFrame = getLayoutInflater().inflate(R.layout.demo_text, null);
FrameLayout frameLayout = (FrameLayout) inflatedFrame.findViewById(R.id.screen) ;
frameLayout.setDrawingCacheEnabled(true);
frameLayout.buildDrawingCache();
Bitmap bm = frameLayout.getDrawingCache();
}
Run Code Online (Sandbox Code Playgroud)
我希望位图是整个布局,但Bitmap总是返回null.
我将位图转换为字节数组,将字节数组转换为位图,但是当我必须在ImageView中显示转换后的字节数组时,它将显示带有黑角的图像,而没有以PNG格式显示。我想以PNG格式显示图片,该怎么办?
这是位图到字节数组转换和字节数组到位图代码:
位图以PNG压缩格式转换为字节数组:
public byte[] convertBitmapToByteArray(Bitmap bitmap) {
ByteArrayOutputStream stream = null;
try {
stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
return stream.toByteArray();
}finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
Log.e(Helper.class.getSimpleName(), "ByteArrayOutputStream was not closed");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
并将字节数组转换为位图为:
BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
Run Code Online (Sandbox Code Playgroud) 我想在我的标记旁边的超级应用程序中显示标记.如何在谷歌地图中制作这样的标签?
我已经尝试添加标题和片段了.但它不是我非常期待的东西.
mMap.addMarker(new MarkerOptions()
.position(MELBOURNE)
.title("6 min away")
.snippet("Pick up point ")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.pickup_2x)));
Run Code Online (Sandbox Code Playgroud)

我正在制作一个图像过滤器应用程序,在应用过滤器之前,我将图像裁剪为正方形,我可以使用Soundcloud库像这样裁剪图像:-
private void beginCrop(String sources) {
img_name = "cropped"+System.currentTimeMillis();
Uri destination = Uri.fromFile(new File(getCacheDir(), "cropped"+System.currentTimeMillis()));
Uri source = Uri.parse("file://"+sources);
Crop.of(source, destination).withAspect(200,200).start(this);
}
private void handleCrop(int resultCode, Intent result) {
if (resultCode == RESULT_OK) {
Toast.makeText(this,Crop.getOutput(result).toString(), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(AlbumActivity.this,FilterImageActivity
.class);
intent.putExtra("output_image",Crop.getOutput(result).toString());
startActivity(intent);
} else if (resultCode == Crop.RESULT_ERROR) {
Toast.makeText(this, Crop.getError(result).getMessage(), Toast.LENGTH_SHORT).show();
}
}}
Run Code Online (Sandbox Code Playgroud)
以及下一个活动是FilterImageActivity.java:-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_filter_image);
String uri = getIntent().getStringExtra("output_image");
setImageDir(uri);
}
Run Code Online (Sandbox Code Playgroud)
和功能setImageDir():-
private void setImageDir(String uri)
{
Bitmap bitmap = …Run Code Online (Sandbox Code Playgroud) 开始研究专门针对Windows的屏幕捕获软件.在MSDN上查看捕获图像的示例时,我发现自己有点困惑.
当我提到不包含与实际文件相关联的标题等的位图的大小时,请记住.我在谈论原始像素数据.我本以为应该是公式(width*height)*bits-per-pixel.但是,根据示例,这是计算大小的正确方法:
DWORD dwBmpSize = ((bmpScreen.bmWidth * bi.biBitCount + 31) / 32) * 4 * bmpScreen.bmHeight;
Run Code Online (Sandbox Code Playgroud)
和或: ((width*bits-per-pixel + 31) / 32) * 4 * height
我不明白为什么有额外的计算涉及31,32和4.也许填充?我不确定,但任何解释都会非常感激.我已经尝试过谷歌搜索,但没有找到任何特别有用的结果.