如何从Android发送图像到C++编写的服务器 我想把Android的图片发送给C++编写的服务器。我希望用Socket发送图像,这样就不用担心C++和java之间的区别了。然而,Android中的图像通常存储为位图,位图是Android中定义的类,但在C++中,类不存在。所以我想知道,如果我想用这种方式发送图像,我应该怎么做。所以,我来这里是为了您的帮助,谢谢。 < P>发送像文件一样的文件。JPG或.PNG < /P> < P>我假设服务器是一个定制系统,正如您提到的C++编写的。在这种情况下,您只需通过每个tcp/ip的套接字以每像素32位的速度发送大小为x、y和rgba的数据

如何从Android发送图像到C++编写的服务器 我想把Android的图片发送给C++编写的服务器。我希望用Socket发送图像,这样就不用担心C++和java之间的区别了。然而,Android中的图像通常存储为位图,位图是Android中定义的类,但在C++中,类不存在。所以我想知道,如果我想用这种方式发送图像,我应该怎么做。所以,我来这里是为了您的帮助,谢谢。 < P>发送像文件一样的文件。JPG或.PNG < /P> < P>我假设服务器是一个定制系统,正如您提到的C++编写的。在这种情况下,您只需通过每个tcp/ip的套接字以每像素32位的速度发送大小为x、y和rgba的数据,android,c++,sockets,Android,C++,Sockets,您所要做的就是打开从客户端android到serverc++的tcp/ip连接,从位图发送大小和数据,并在服务器端重新构建,然后保存或以任何方式处理它 您可以使用getPixels获取android位图的rgba数据: 您也可以根据发送系统进行设置。如果您使用windows系统,则可以使用setdibbits进行设置 这是我用来发送参数和一个帖子的图片 public void send_data() throws IOException { HttpU

您所要做的就是打开从客户端android到serverc++的tcp/ip连接,从位图发送大小和数据,并在服务器端重新构建,然后保存或以任何方式处理它

您可以使用getPixels获取android位图的rgba数据:

您也可以根据发送系统进行设置。如果您使用windows系统,则可以使用setdibbits进行设置


这是我用来发送参数和一个帖子的图片

public void send_data() throws IOException
    {


                HttpURLConnection connection = null;
                DataOutputStream outputStream = null;
                String lineEnd = "\r\n";
                String twoHyphens = "---";
                String boundary =  "ABCADA";

                String urlServer = "http://yourwebsrvr.com";
                Log.w("DHA", urlServer);
                URL url = null;
                try {
                    url = new URL(urlServer);
                } catch (MalformedURLException e1) {

                    Log.w("DHA", "PROTOCOL EXCEPTION");

                    e1.printStackTrace();
                }
                if (url != null)
                {   
                    Log.w("DHA", "Merge aici");
                    try {
                        connection = (HttpURLConnection) url.openConnection();
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    if (connection != null)
                    {
                        Log.w("DHA", "Si aici mere!");
                        connection.setDoInput(true);
                        connection.setDoOutput(true);
                        connection.setUseCaches(false);
                        try {
                            connection.setRequestMethod("POST");
                        } catch (ProtocolException e) {

                            Log.w("DHA", "PROTOCOL EXCEPTION");

                            e.printStackTrace();
                            return;
                        }
                        connection.setRequestProperty("Host", "yourhost.com");
                        connection.setRequestProperty("Connection", "Keep-Alive");
                        connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=ABCADA");
                        try {
                            outputStream = new DataOutputStream(connection.getOutputStream());
                        } catch (IOException e) {

                            Log.w("DHA", "PROTOCOL EXCEPTION");

                            e.printStackTrace();

                        }
                        try {
                            Log.w("DHA", "Val is + " + String.valueOf(bts.size()));
                            outputStream.writeBytes(twoHyphens + boundary + lineEnd);
                            outputStream.writeBytes("Content-Disposition: form-data; name=\"Lat\"" + lineEnd);
                            outputStream.writeBytes(lineEnd);
                            outputStream.writeBytes("0" + lineEnd);

                            outputStream.writeBytes(twoHyphens + boundary + lineEnd);
                            outputStream.writeBytes("Content-Disposition: form-data; name=\"IMEI\"" + lineEnd);
                            outputStream.writeBytes(lineEnd);
                            outputStream.writeBytes(getImei() + lineEnd);

                            outputStream.writeBytes(twoHyphens + boundary + lineEnd);
                            outputStream.writeBytes("Content-Disposition: form-data; name=\"Lon\"" + lineEnd);
                            outputStream.writeBytes(lineEnd);
                            outputStream.writeBytes("0" + lineEnd);

                            outputStream.writeBytes(twoHyphens + boundary + lineEnd);
                            outputStream.writeBytes("Content-Disposition: form-data; name=\"comment\"" + lineEnd);
                            outputStream.writeBytes(lineEnd);
                            outputStream.writeBytes("Incarcata la sincronizare" + lineEnd); 

                            outputStream.writeBytes(twoHyphens + boundary + lineEnd);
                            outputStream.writeBytes("Content-Disposition: form-data; name=\"locatie_id\"" + lineEnd);
                            outputStream.writeBytes(lineEnd);
                            SharedPreferences pref = getSharedPreferences("data",MODE_WORLD_WRITEABLE);
                            String data_db = pref.getString(md5hash, "0");
                            Log.d("DHA", "Poze e aici " + data_db);
                            outputStream.writeBytes(data_db + lineEnd); 

                            outputStream.writeBytes(twoHyphens + boundary + lineEnd);
                            outputStream.writeBytes("Content-Disposition: form-data; name=\"hash\"" + lineEnd);
                            outputStream.writeBytes(lineEnd);
                            outputStream.writeBytes(md5hash + lineEnd); 

                            outputStream.writeBytes(twoHyphens + boundary + lineEnd);
                            outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + "PICT0000" +"\"" + lineEnd);
                            outputStream.writeBytes(lineEnd);
                            outputStream.write(bts.toByteArray());
                            outputStream.writeBytes(lineEnd);
                            outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
                            Log.w("DHA", "Incep trimiterea pozei fraierului!");

                            outputStream.flush();
                            outputStream.close();
                            Log.w("DHA", "response" + String.valueOf(connection.getResponseCode()));

                        } catch (IOException e) {

                            Log.w("DHA", "PROTOCOL EXCEPTION");

                            e.printStackTrace();
                        }



            }
                }


            }

将图像压缩为.jpg格式并将其作为字节数组发送?非常感谢你的建议。我以前也考虑过这个问题。但我想知道当我发送图像时应该考虑多少问题。例如,通道的数量和像素的深度。我应该考虑多少问题?此外,我在实践中发现getpixel函数可能会变得效率低下,尤其是当图像大小较大时。当然,您可以处理16位和32位图像,这应该涵盖大多数情况。您也可以简单地将它们转换为32位或作为压缩的jpeg文件传输。是的,getpixel非常慢,但是getpixels访问整个图像,而不仅仅是单个像素的速度要快得多。您应该提供更多关于您实际想要做什么的信息:发送图像的原因、图像的大小、传输是否有大小/速度限制等。很抱歉,我将getpixel误认为getpixel。但是对于一些大照片,由于内存的限制,我没有使用getpixels方法。我现在正在考虑将一张大照片分成几部分,并使用getpixels方法处理每一部分,但我还没有尝试过。谢谢。但是服务器应该如何从流中重建图像呢?它是通过http post发送的。您的web服务器需要知道如何处理http post,以及如何处理脚本指示它执行的操作。当我开始编写代码时,我认为套接字会更容易。看来我应该花更多的时间学习其他方法。非常感谢。请看这个问题注意,这个问题的答案还将图像压缩为JPEG格式,这是一个很好的东西TM,因为通过3G上传原始图像是。。。昂贵…我已经阅读了链接,谢谢。但我仍然想知道php中的函数move_上传的文件是否与C中的printf相同?我明白了。我将尝试将图像压缩为JPEG格式,感谢您的帮助,Torp.no move\u upload\u文件与printf不同。move_upload_file功能仅适用于通过HTTP POST上传的文件。