每当我点击列中的最后一行时,应用程序就会在iPhone上崩溃,但不会在模拟器上崩溃。其他一切都很好。我没有收到任何错误消息。代码与模拟器一起完美运行。
import processing.video.*;
//import hypermedia.net.*;
PImage img;
PImage img2;
PImage img3;
Capture video;
final int TOLERANCE = 20;
float XRc = 0;// XY coordinate of the center of the first target
float YRc = 0;
float XRh = 0;// XY coordinate of the center of the second target
float YRh = 0;
float XRc2 = 0; // XY coordinate of the center of the third target
float YRc2 = 0;
float XRh2 = 0;// XY coordinate of the center of the fourth target
float YRh2 = 0;
int ii=0; //Mouse click counter
color trackColor; //The first color is the center of the robot
color trackColor2; //The second color is the head of the robot
color trackColor3; //The first color is the center of the robot 2
color trackColor4; //The first color is the center of the robot 2
void setup() {
img = loadImage("IMG_4700.JPG");
img2 = loadImage("2.JPG");
img3 = loadImage("3.JPG");
size(800,800);
video = new Capture(this,640,480);
video.start();
trackColor = color(94,164,126);
trackColor2 = color(60,110,194);
trackColor3 = color(197, 76,64);
trackColor4 = color(255,0,0);
smooth();
}
void draw() {
background(0);
if (video.available()) {
video.read();
}
video.loadPixels();
image(video,0,0);
float r2 = red(trackColor);
float g2 = green(trackColor);
float b2 = blue(trackColor);
float r3 = red(trackColor2);
float g3 = green(trackColor2);
float b3 = blue(trackColor2);
float r4 = red(trackColor3);
float g4 = green(trackColor3);
float b4 = blue(trackColor3);
float r5 = red(trackColor4);
float g5 = green(trackColor4);
float b5 = blue(trackColor4);
int somme_x = 0, somme_y = 0; // pour le calcul des baricentres
int compteur = 0;
int somme_x2 = 0, somme_y2 = 0; // pour le calcul des baricentres
int compteur2 = 0;
int somme_x3 = 0, somme_y3 = 0; // pour le calcul des baricentres
int compteur3 = 0;
int somme_x4 = 0, somme_y4 = 0; // pour le calcul des baricentres
int compteur4 = 0;
for(int x = 0; x < video.width; x++) {
for(int y = 0; y < video.height; y++) {
int currentLoc = x + y*video.width;
color currentColor = video.pixels[currentLoc];
float r1 = red(currentColor);
float g1 = green(currentColor);
float b1 = blue(currentColor);
if(dist(r1,g1,b1,r2,g2,b2) < TOLERANCE) {
somme_x += x;
somme_y += y;
compteur++;
}
else if(compteur > 0) {
XRc = somme_x / compteur;
YRc = somme_y / compteur;
}
if(dist(r1,g1,b1,r3,g3,b3) < TOLERANCE) {
somme_x2 += x;
somme_y2 += y;
compteur2++;
}
else if(compteur2 > 0) {
XRh = somme_x2 / compteur2;
YRh = somme_y2 / compteur2;
}
if(dist(r1,g1,b1,r4,g4,b4) < TOLERANCE) {
somme_x3 += x;
somme_y3 += y;
compteur3++;
}
else if(compteur3 > 0) {
XRc2 = somme_x3 / compteur3;
YRc2 = somme_y3 / compteur3;
}
if(dist(r1,g1,b1,r5,g5,b5) < TOLERANCE) {
somme_x4 += x;
somme_y4 += y;
compteur4++;
}
else if(compteur4 > 0) {
XRh2 = somme_x4 / compteur4;
YRh2 = somme_y4 / compteur4;
}
}
}
// track the color and show images
boolean c1 = false;
boolean c2 = false;
boolean c3 = false;
if(XRc != 0 || YRc != 0) { // color Green detected
c1 = true;
c2 = false;
c3 = false;
}
if(XRh != 0 || YRh != 0) { // color blue detected
c2 = true;
c1 = false;
c3 = false;
}
if(XRc2 != 0 || YRc2 != 0) { // color red detected
c3 = true;
c1 = false;
c2 = false;
}
if(c1 == true) {
image(img,0,0); // show image 1
} else if (c2 == true) {
image(img2,0,0); // show image 2
} else if (c3 == true) {
image(img3,0,0); // show image 3
}
}
答案 0 :(得分:0)
对于您正在加载的所有图片,可能是手机内存不足 - 我最近遇到了这个问题。没有错误,但有时我确实看到&#34;低内存警告&#34;在调试控制台上。
要诊断它,请创建一个图像名称数组,循环显示它以填充UIImage的数组,但检查它们是否随时加载。然后你可以将其设置为animationImages。所以,
private FacebookCallback<LoginResult> callback=new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
AccessToken accessToken=loginResult.getAccessToken();
Profile profile=Profile.getCurrentProfile();
//DisplayMessage(profile);
GraphRequest request=GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
try{
tv1=(TextView)getView().findViewById(R.id.name);
tv1.setText("Name : " + object.getString("name"));
tv2=(TextView)getView().findViewById(R.id.birthday);
tv2.setText("BirthDay : " + object.getString("birthday"));
tv3=(TextView)getView().findViewById(R.id.id);
tv3.setText("link : " + object.getString("link"));
String id=object.getString("id");
Bitmap mBitmap = getFacebookProfilePicture(id);
img.setImageBitmap(mBitmap);
/*Toast.makeText(getActivity().getApplicationContext(), object.getString("name") + object.getString("birthday") +object.getString("link")
, Toast.LENGTH_SHORT).show();*/
}catch (JSONException e){
e.printStackTrace();
}
}
});
Bundle parameters= new Bundle();
parameters.putString("fields","name,birthday,link");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
}
};
public Bitmap getFacebookProfilePicture(String userID) {
Bitmap bitmap = null;
try {
URL imageURL = new URL("https://graph.facebook.com/" + userID
+ "/picture?type=large");
bitmap = BitmapFactory.decodeStream(imageURL.openConnection()
.getInputStream());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bitmap;
}
您可以在继续设置断点以查看您获得的距离。
假设这是正在进行的,修复问题,您将需要使用图像编辑程序使图像更小(以像素为单位)。就我而言,我的图像是以4000x6000像素拍摄的照片;我发现将它们调整为实际显示的大小会产生影响。此外,保存50%丢失的文件使它们大约占原始大小的15%(以字节为单位),这使得它们的加载速度更快。我向同事展示了原始的和调整大小/有损的图像,他们看不出有什么不同(一个人认为这是某种玩笑)。
答案 1 :(得分:0)
我在使用大量图像制作的应用程序时遇到了类似的问题(100)。它们的存在也减慢了应用程序的速度。当我缩小每张图片的文件大小时 - 不会影响图像质量。有效!!轻松完成预览&#39;在Apple上。
<强>解决方案:强>
使用&#39;预览&#39;
转到顶部的菜单...&#39;工具&#39; ...&#39;调整尺寸&#39;
缩小图像的像素大小+保存
将新保存的图像放回到应用程序的Xcode中
将文件大小减少40%,而不会降低App工作中图像质量的任何降低!