当我将纹理应用于形状时,我一直看到它被镜像.GLU.gluLookAt设置为5个单位,因此它是GLU.gluLookAt(gl,0,0,5,0,0,0,0,2,0);. 如果下降5个单位,则x轴将反转,这将是一个更大的问题.
你能告诉我如何将正在加载的位图镜像为纹理吗?我想保持轴的位置和绘制形状的方式,我只想自动镜像位图.
你能告诉我怎么做吗?也许给我一个代码序列来反映x轴上的位图?
我已经看了一遍解决我的问题,似乎无法弄明白.我敢肯定它可能是1或2条简单的线条,希望有人可以引导我朝着正确的方向前进.
在我的应用中,用户可以单击将打开图库的按钮.一旦他们选择了图像,它就会在我的应用程序中的ImageView中显示该图像.那部分工作得非常好.最初,我只是从画廊返回一个uri,我会直接显示:
imageView1.setImageURI(myUri);
Run Code Online (Sandbox Code Playgroud)
好吧,显然我现在遇到了可怕的"Out Of Memory"错误,如果用户连续多次重新加载该页面,那么我必须清理我的代码以缩小图像.我通过实现一个位图类来实现这一点,该类将图像转换为位图并为我缩小位图.现在,我的ImageView显示代码如下所示:
imageView1.setImageBitmap(bitmap1);
Run Code Online (Sandbox Code Playgroud)
那部分工作正常.这是问题:
我将uri路径转换为字符串,然后将其保存在SharedPreference中.这样当用户退出应用程序并稍后返回时,它们自动显示的图像就会显示出来.我像这样转换uri:
...
selectedImageUri = data.getData();
String selectedImagePath;
selectedImagePath = getPath(selectedImageUri);
...
Run Code Online (Sandbox Code Playgroud)
检索SharedPreference字符串的旧方法,将其转换为uri,然后显示它工作正常.(当然,除了Out Of Memory错误)它看起来像这样:
Uri myUri = Uri.parse(selectedImagePath);
imageView1 = setImageURI(myUri);
Run Code Online (Sandbox Code Playgroud)
"selectedImagePath"显然是我从SharedPreference中检索到的String.再次,这工作正常,但如果重新加载太多次将抛出错误.
现在不工作的部分是当我尝试实现新的Bitmap转换时,我可以缩放位图而不会出现内存错误.这是代码:
Uri myUri = Uri.parse(selectedImagePath)
Bitmap bitmap = getThumbnail(myUri);
imageView1.setImageBitmap(bitmap);
Run Code Online (Sandbox Code Playgroud)
这没什么.原始图像选择显示图像正常但当我返回到此屏幕并尝试从SharedPreference解析字符串然后将其转换为位图时,什么都没有显示."getThumbnail"方法的代码直接来自THIS POST --->
这是第三个答案.
有人有主意吗?对不起,超长的帖子,但我宁愿解释我的问题,而不是提供足够的信息.对不起,如果在其他地方得到了回答.我一直在寻找其他问题几个小时,并没有找到解决我的问题的任何东西.
谢谢.
我正在尝试在我的应用程序中加载大小为495KB的图像.如果我加载此图像比堆大小从25MB增加到35MB,这导致我的应用程序中出现真正的内存问题.如果我不加载此图像比堆大小保持在25MB.任何人都可以告诉它为什么需要这么多的堆大小?
图片如下

我用来加载图片的代码是
InputStream s4 = getResources().openRawResource(R.drawable.parallax_layer4);
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
System.gc();
if(bitmap4 != null) {
bitmap4.recycle();
}
s3 = null;
System.gc();
bitmap4 = bitmap(s4);
layer4Back = new ImageView(this);
layer4Back.setImageBitmap(bitmap4);
layer4Back.setScaleType(ScaleType.FIT_XY);
parallaxLayout.addView(layer4Back, 3, lp);
try {
s4.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
s4 = null;
System.gc();
private static Bitmap bitmap(final InputStream is) {
Bitmap bitmap = null;
System.gc();
Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;
options.inSampleSize = 1;
try { …Run Code Online (Sandbox Code Playgroud) 我收到一个错误,说Bitmaps正在使用大量内存.
我知道我应该使用bitmap.recyle()但我不知道在哪里放它,无论我把它放在哪里我得到一个错误说我正在尝试使用循环位图.
如果有人能提供帮助,那就太棒了.
这是我的相关代码:
public class PictureViewer extends SherlockActivity implements
android.view.GestureDetector.OnGestureListener {
private ViewFlipper viewFlipper = null;
private GestureDetector gestureDetector = null;
ArrayList<Integer> number = new ArrayList<Integer>();
DownloadBitmap bit = new DownloadBitmap();
int j = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Remove title bar
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.pictureviewer);
viewFlipper = (ViewFlipper) findViewById(R.id.viewflipper);
gestureDetector = new GestureDetector(this);
for (int i = 1; i <= 65; ++i)
number.add(i);
Collections.shuffle(number);
loadImage();
loadImage();
}
public void loadImage() {
if (j == 65) { …Run Code Online (Sandbox Code Playgroud) 我想保存一个由互联网地址驱动的GIF.当我从浏览器请求文件时,我收到以下字符:
GIF87a½€ÿÿÿ,½þ„©Ëí£œ´Ú‹³Þ¼û†âH–æ‰Ádk
ÇòòµuÏú>æùôãEX¯–Ѝ²µ‚‰"<}O)Ò¨¬:kÜ'Õª]þ¢`ìc
Ú”ìvöhe;Ï]¸;oßÂyþ|Þ‡µe§'hÄÔdhW÷§H#&gö¨ð…G™Gy(‰ x÷j†øyÙˆI8uJZZiª
™ªÚº¹i {ç‰Zj™ˆwšµ7
©;é›9Æy¤VÄ$ú;œË›ÙÛI¬,œ=}|,l¼Û˧¸ìæ%]h~n»8»ÌíIv—Fe6¿‹¸®0YÉ
J7k8”•pÕá C¬4Èráâ;zü2¤È‘$Kš
Run Code Online (Sandbox Code Playgroud)
我可以使用这些字符检索GIF格式吗?
我使用https://github.com/thest1/LazyList进行图像缓存.我必须全屏显示图像.但是图像质量有很大的损失.哪个代码我必须改变以获得原始image.thanks提前.
当我们从左到右和从右到左移动(触摸)图像时,我需要一个示例代码.请帮我.
此致,
chakri
我有这段代码从图库中获取图像,然后将其传递给意图进行裁剪.一切工作正常,但这个无论是在画廊创造了新的裁剪图像或裁剪一个替换旧的形象,但我想要做的就是让新的裁剪后的图像在我的节目临时存储,直到它再次被用户更改.
这是我的代码:
Uri selectedImage = imageReturnedIntent.getData();
final Intent intent = new Intent("com.android.camera.action.CROP");
intent.setData(selectedImage);
intent.putExtra("outputX", width);
intent.putExtra("outputY", height);
intent.putExtra("aspectX", width);
intent.putExtra("aspectY", height);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection", true);
intent.putExtra("output", selectedImage); // with this enabled it replaces the original image and without it creates new one in gallery.
startActivityForResult(intent, 23);
Run Code Online (Sandbox Code Playgroud) 这是我的代码:
int[] image = {R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2,
R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2,
R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2,
R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2,
R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2,
R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2};
Run Code Online (Sandbox Code Playgroud)
和getView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.item, null);
ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView);
imageView.setBackgroundResource(image[position]);
return convertView;
}
Run Code Online (Sandbox Code Playgroud)
一切都好.没有OOM.
然后,我想首先对drawable进行采样:
public static Bitmap sampleImage(Context context, int resourceId, int sampleSize) {
Bitmap resizeBmp = null;
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = sampleSize;
resizeBmp = BitmapFactory.decodeResource(context.getResources(), resourceId, opts);
return …Run Code Online (Sandbox Code Playgroud) 我认为不是使用带有8位BMP的TImage而是保存我自己的Bitmap - 我之前已经用Delphi做了几次.但由于某些原因我无法弄清楚,文件的前两个字节总是写为四个字节!我的标题记录是
type
BitmapH = Record
head : WORD;
filesize : DWORD;
reserved : DWORD;
bmpoffset : DWORD;
bmpheadersize : DWORD;
width : DWORD;
height : DWORD;
planes : WORD;
bpp : word;
comp : longint;
bmdatasize : longint;
hres : longint;
vres : longint;
numofcolors : longint;
importantcolors : longint;
palette : array[0..1023] of byte;
end;
Run Code Online (Sandbox Code Playgroud)
我已经尝试过将其更改为2字节数组仍然没有去.即使它改为head:byte; 它仍然写入1个字节,然后将垃圾推送到下一个3.我必须遗漏一些简单的东西!
这是我写文件头的方式 -
var BM : file of BitmapH;
var BMD : file of byte;
var header : BitmapH;
var i …Run Code Online (Sandbox Code Playgroud)