Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从gallery导入的图像中获取Android中的像素颜色?_Android - Fatal编程技术网

从gallery导入的图像中获取Android中的像素颜色?

从gallery导入的图像中获取Android中的像素颜色?,android,Android,该代码的问题是,它只获取所有图片的颜色值,而不获取用户单击/触摸的位置的颜色值! 我相信一定有一个简单的问题! 这是代码,让我们看看你能得到什么!;) import java.io.FileNotFoundException; 导入java.util.Locale; 导入android.app.Activity; 导入android.content.Intent; 导入android.graphics.Bitmap; 导入android.graphics.BitmapFactory; 导入and

该代码的问题是,它只获取所有图片的颜色值,而不获取用户单击/触摸的位置的颜色值! 我相信一定有一个简单的问题! 这是代码,让我们看看你能得到什么!;)

import java.io.FileNotFoundException;
导入java.util.Locale;
导入android.app.Activity;
导入android.content.Intent;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.graphics.Color;
导入android.graphics.drawable.BitmapDrawable;
导入android.net.Uri;
导入android.os.Bundle;
导入android.speech.tts.TextToSpeech;
导入android.speech.tts.TextToSpeech.OnInitListener;
导入android.view.MotionEvent;
导入android.view.view;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.TextView;
公共类MPActivity扩展了活动{
私有文本语音MTT;
私有图像查看目标图像;
私有文本视图文本视图;
私有文本视图文本视图;
私有文本视图文本视图;
私有布尔hasTTSBeenInitialized=false;
私有整数图像宽度;
私人内部图像高度;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button buttonLoadImage=(按钮)findViewById(R.id.loadimage);
textView=(textView)findViewById(R.id.textView);
textViewCol=(TextView)findViewById(R.id.textViewColor);
targetImage=(ImageView)findViewById(R.id.targetImage);
textViewVal=(TextView)findViewById(R.id.textViewValue);
targetImage=(ImageView)findViewById(R.id.targetImage);
buttonLoadImage.setOnClickListener(新建Button.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
//TODO自动生成的方法存根
意向意向=新意向(意向.行动\u选择,
android.provider.MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI);
startActivityForResult(意向,0);
}});
mTts=new TextToSpeech(这是新的OnInitListener(){
@凌驾
公共无效onInit(int状态){
hasTTSBeenInitialized=true;
}
});
mTts.setLanguage(Locale.US);
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
//TODO自动生成的方法存根
super.onActivityResult(请求代码、结果代码、数据);
if(resultCode==RESULT\u OK){
Uri targetUri=data.getData();
位图;
试一试{
位图=BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
//w2,h2
imageWidth=bitmap.getWidth();
imageHeight=bitmap.getHeight();
targetImage.setImageBitmap(位图);
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
targetImage.setOnTouchListener(新的ImageView.OnTouchListener(){
公共布尔onTouch(视图v,运动事件){
//TODO自动生成的方法存根
intx=((int)event.getX()/v.getWidth())*imageWidth;
int y=((int)event.getY()/v.getHeight())*imageHeight;
textView.setText(“触摸坐标:+String.valueOf(event.getX())+“x”+String.valueOf(event.getY()));
ImageView ImageView=((ImageView)v);
位图位图=((BitmapDrawable)imageView.getDrawable()).getBitmap();
//计算->x,y-图像空间
int pixel=bitmap.getPixel(x,y);
textViewVal.setText(“[”+颜色.红色(像素)+“,“+颜色.绿色(像素)+”,“+颜色.蓝色(像素)+“])”;
如果((颜色.红色(像素)>200)和&(颜色.蓝色(像素)<10)和&(颜色.绿色(像素)<10)){
if(hasTTSBeenInitialized){
mTts.speak(“颜色为红色”,TextToSpeech.QUEUE\u FLUSH,null);
}
textViewCol.setText(“颜色为红色”);
} 
返回true;}
});
}
}

看起来像是整数除法的问题。此表达式可能产生零:

(int)event.getX() / v.getWidth()
由于您已将
getX()
的值强制转换为
int
,并且
getWidth()
返回
int
,因此会发生整数除法,这意味着结果会被截断为最接近的较低整数。取而代之的是,在除法之前先进行乘法运算,最后才进行转换

int x = (int) (event.getX() * imageWidth / v.getWidth());
int y = (int) (event.getY() * imageHeight / v.getHeight());

可能是我太累了,但我在代码中找不到为x和y赋值的地方。在这里,我更新了我的代码,并以红色为例,供程序读取。。。谢谢你…我很感激,它工作得很好。。。但是对不起,我的声誉太低了,我不能投票支持你的答案!很高兴我的回答很有帮助。您应该可以通过单击它旁边的复选标记来接受它。
int x = (int) (event.getX() * imageWidth / v.getWidth());
int y = (int) (event.getY() * imageHeight / v.getHeight());