我有一个Android客户端和C#服务器,他们通过socket进行通信.我有这个问题 - 如果我在调试模式下运行我的客户端应用程序并在正确的位置放置一个断点 - 它完美地工作,但没有它它没有.客户端将图像的地址发送到服务器,服务器创建它的缩略图,将其转换为byte []并将其发回.客户端获取byte [],将其转换回图像并显示它.我还发现,当它没有得到正确的字节[]时,它的大小是2896,有时是1448,无论发送的数组的原始大小是多少.
这是客户:
private void connectSocket(String a){
try {
InetAddress serverAddr = InetAddress.getByName("192.168.1.2");
Socket socket = new Socket(serverAddr, 4444);
String message = a;
flag = 0;
if(a.indexOf(".jpg")>0){
flag = 1;
}
ListItems.clear();
if(!a.equalsIgnoreCase("get_drives"))){
//.....
}
if(!ListItems.isEmpty()){
if(ListItems.get(0).matches("^[A-Z]{1}:$")){
ListItems.set(0, ListItems.get(0)+"\\");
}
}
PrintWriter out = null;
BufferedReader in = null;
InputStream is = null;
try {
out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
is = socket.getInputStream();
out.println(message);
String text = …Run Code Online (Sandbox Code Playgroud) int DiferentPixels = 0;
Bitmap first = new Bitmap("First.jpg");
Bitmap second = new Bitmap("Second.jpg");
Bitmap container = new Bitmap(first.Width, first.Height);
for (int i = 0; i < first.Width; i++)
{
for (int j = 0; j < first.Height; j++)
{
int r1 = second.GetPixel(i, j).R;
int g1 = second.GetPixel(i, j).G;
int b1 = second.GetPixel(i, j).B;
int r2 = first.GetPixel(i, j).R;
int g2 = first.GetPixel(i, j).G;
int b2 = first.GetPixel(i, j).B;
if (r1 != r2 && g1 != g2 && b1 …Run Code Online (Sandbox Code Playgroud) 在我的活动中,位图就在那里,它正在屏幕上移动(通过Accelerometer).如果位图在屏幕上达到某个指定的坐标,那么我会在那里设置一个条件,然后它应该不会显示更多或它将永久删除.
我怎样才能做到这一点.给我一个方法
很抱歉问这样的问题,但我找不到一个好的答案:/
BitmapImage和Bitmap有什么区别?
我想使用TIFF图像与我必须工作的任何一个.我发现了一些适用于BitmapImage的教程和另一个适用于Bitmap的教程.
我有这个方法应该截取屏幕截图并将图像返回给调用方法.
public static Bitmap TakeScreenshot(int x, int y, int height, int width)
{
Rectangle bounds = new Rectangle(0, 0, height, width);
Bitmap bitmap;
using (bitmap = new Bitmap(bounds.Width, bounds.Height))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(new Point(x, y), Point.Empty, bounds.Size);
}
}
return bitmap;
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试保存图片时:
Bitmap bitmap = MyClass.TakeScreenshot(0, 0, 200, 200);
bitmap.Save(@"C:\test.jpg", ImageFormat.Jpeg);
Run Code Online (Sandbox Code Playgroud)
然后我在save-method上得到一个错误.
ArgumentException未处理.参数无效.
如果我尝试将其保存在这样的方法中,它工作正常:
public static Bitmap TakeScreenshot(int x, int y, int height, int width)
{
Rectangle bounds = new Rectangle(0, 0, height, width);
using …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我需要调用API使用Http Post将一些信息发送到Web服务器.所以我需要将userid,name,phoneNo和image附加到网址.我需要将图像转换为字节数组并将其附加到url.我使用了以下代码,但它对我不起作用.我只是得到一个像这样的字节数组[B@4055dd90
我的代码是
Bitmap bitmap1 = ((BitmapDrawable) d).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap1.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bitmapdata = stream.toByteArray();
Run Code Online (Sandbox Code Playgroud)
有人可以帮帮我吗 ?
提前致谢 !
当我做的时候
b.Save(outputFilename, ImageFormat.Bmp);
Run Code Online (Sandbox Code Playgroud)
其中b是16位位图,它使用位域压缩保存.如何在不使用任何压缩的情况下进行C#保存?
这就是我对@Ben Voigt发布的链接所做的事情:
ImageCodecInfo myImageCodecInfo;
Encoder myEncoder ;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
myEncoder = Encoder.Compression;
myImageCodecInfo = GetEncoderInfo("image/bmp");
myEncoderParameters = new EncoderParameters(1);
myEncoderParameter = new EncoderParameter(myEncoder,
(long)EncoderValue.CompressionNone);
myEncoderParameters.Param[0] = myEncoderParameter;
b.Save(outputFilename, myImageCodecInfo, myEncoderParameters );
Run Code Online (Sandbox Code Playgroud)
当我传递8位位图时,不使用压缩.但是当我传递一个16位RGB位图时,它仍然使用位域压缩.
我环顾四周,从其他人的帖子中我认为这个错误是因为我的活动可能超过了堆限制.我正在操作一些位图并应用技术来减少我的应用程序的堆大小,例如不使用Bitmap.createBitmap(),而是将一个小位图放大为空白位图进行修改.我也在创建的位图上使用inPurgable选项.这是我的代码.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("INFO","At 2###########");
setContentView(R.layout.landingscreen);
Thread thread = new Thread(this);
thread.start();
}
Run Code Online (Sandbox Code Playgroud)
我的活动实现了Runnable,这是run()
public void run() {
BitmapFactory.Options factoryOptions = new BitmapFactory.Options();
factoryOptions.inPurgeable = true;
factoryOptions.inInputShareable = true;
Bitmap tempCBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.c6,factoryOptions);
cBitmap = tempCBitmap.copy(Bitmap.Config.ARGB_8888, true);
PrepareLines();
Bitmap dBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.dummy);
Bitmap textLayer = Bitmap.createScaledBitmap(dBitmap, w, h, false);
Bitmap workLayer = Bitmap.createScaledBitmap(dBitmap, w, h, false);
canvas = new Canvas(textLayer);
canvas.drawText(lineOne, xCenter, yCenter, paint);
canvas.drawText(lineTwo, xCenter, yCenter+20, paint);
canvas.drawText(lineThree, xCenter, yCenter+40, paint);
Camera mCamera = …Run Code Online (Sandbox Code Playgroud) 我一直试图通过MediaStore内容提供商查询SD卡上的所有图像,并在GridView上显示它们的缩略图.
但是,如果我在主线程上加载图像缩略图,滚动速度会非常慢......
所以我试图通过asynctasks加载位图:滚动性能变得更好,但现在网格项不断重新加载缩略图,直到它获得正确的位图...
这是我的asynctask,它加载位图:
package x.y;
import java.lang.ref.WeakReference;
import android.content.ContentResolver;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory.Options;
import android.os.AsyncTask;
import android.provider.MediaStore;
import android.widget.ImageView;
public class ImageThumbnailLoader extends AsyncTask<Long, Void, Bitmap> {
private final Options mOptions;
private WeakReference<ImageView> mImageViewWeakReference;
private ContentResolver mContentResolver;
public ImageThumbnailLoader(ImageView imageView,
ContentResolver cr) {
mContentResolver = cr;
mImageViewWeakReference = new WeakReference<ImageView>(imageView);
mOptions = new Options();
mOptions.inSampleSize = 4;
}
@Override
protected Bitmap doInBackground(Long... params) {
Bitmap result;
result = MediaStore.Images.Thumbnails.getThumbnail(
mContentResolver, params[0],
MediaStore.Images.Thumbnails.MINI_KIND, mOptions);
return result;
}
@Override
protected void …Run Code Online (Sandbox Code Playgroud) android bitmap mediastore android-asynctask android-cursoradapter
我需要获取像素的颜色以便与我的color.xml文件中的颜色进行比较,但是所有值均为负,并且此比较将始终返回错误的结果。如何获得正确的颜色值?此颜色可能是透明的。我已经读过这篇文章,但是我需要一个答案,而不是理论联系。
bmp.getPixel(n.x, n.y) 当我期望返回颜色的适当值时返回零 #00FFFFFF
谢谢
bitmap ×10
android ×6
c# ×4
bytearray ×2
bitmapimage ×1
colors ×1
comparison ×1
debugging ×1
eclipse ×1
getpixel ×1
heap ×1
heap-memory ×1
http-post ×1
mediastore ×1
wpf ×1