gpt4 book ai didi

android - 位图太大而无法上传到纹理中(5312x2988,最大 = 4096x4096)- 如何解决此问题?

转载 作者:行者123 更新时间:2023-11-29 14:37:21 24 4
gpt4 key购买 nike

这是我开始的教程。

http://www.androidhive.info/2014/12/android-uploading-camera-image-video-to-server-with-progress-bar/

基本上,我已经上传了一张图片,我想在自定义图片查看器中显示它。

我已经像这样调整了我的 php.ini 以接受大量上传。

memory_limit = 128M
post_max_size = 1G
file_uploads = On
upload_max_filesize = 1G
max_file_uploads = 20

这是我从 logcat 得到的错误

03-15 01:06:36.843: W/OpenGLRenderer(14403): 位图太大无法上传到纹理中 (5312x2988, max=4096x4096)

好的,所以问题是,当我尝试显示 6M、8M、9M 或 12MEGAPIXELS 的图片时,一切正常。当我尝试显示一张 16Megapixels 照片时,它不显示。

好的,但是教程中的图像查看器会显示图像。但我正在使用不同的类来显示图像。图像查看器似乎显示来自您的 SdCard 的图像。 FeedImageView 允许您显示保存在服务器上的图片。

public class FeedImageView extends ImageView {

public interface ResponseObserver {
public void onError();

public void onSuccess();
}

private ResponseObserver mObserver;

public void setResponseObserver(ResponseObserver observer) {
mObserver = observer;
}

/**
* The URL of the network image to load
*/
private String mUrl;

/**
* Resource ID of the image to be used as a placeholder until the network
* image is loaded.
*/
private int mDefaultImageId;

/**
* Resource ID of the image to be used if the network response fails.
*/
private int mErrorImageId;

/**
* Local copy of the ImageLoader.
*/
private ImageLoader mImageLoader;

/**
* Current ImageContainer. (either in-flight or finished)
*/
private ImageContainer mImageContainer;

public FeedImageView(Context context) {
this(context, null);
}

public FeedImageView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}

public FeedImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

/**
* Sets URL of the image that should be loaded into this view. Note that
* calling this will immediately either set the cached image (if available)
* or the default image specified by
* {@link VolleyImageView#setDefaultImageResId(int)} on the view.
*
* NOTE: If applicable, {@link VolleyImageView#setDefaultImageResId(int)}
* and {@link VolleyImageView#setErrorImageResId(int)} should be called
* prior to calling this function.
*
* @param url
* The URL that should be loaded into this ImageView.
* @param imageLoader
* ImageLoader that will be used to make the request.
*/
public void setImageUrl(String url, ImageLoader imageLoader) {
mUrl = url;
mImageLoader = imageLoader;
// The URL has potentially changed. See if we need to load it.
loadImageIfNecessary(false);
}

/**
* Sets the default image resource ID to be used for this view until the
* attempt to load it completes.
*/
public void setDefaultImageResId(int defaultImage) {
mDefaultImageId = defaultImage;
}

/**
* Sets the error image resource ID to be used for this view in the event
* that the image requested fails to load.
*/
public void setErrorImageResId(int errorImage) {
mErrorImageId = errorImage;
}

/**
* Loads the image for the view if it isn't already loaded.
*
* @param isInLayoutPass
* True if this was invoked from a layout pass, false otherwise.
*/
private void loadImageIfNecessary(final boolean isInLayoutPass) {
final int width = getWidth();
int height = getHeight();

boolean isFullyWrapContent = getLayoutParams() != null
&& getLayoutParams().height == LayoutParams.WRAP_CONTENT
&& getLayoutParams().width == LayoutParams.WRAP_CONTENT;
// if the view's bounds aren't known yet, and this is not a
// wrap-content/wrap-content
// view, hold off on loading the image.
if (width == 0 && height == 0 && !isFullyWrapContent) {
return;
}

// if the URL to be loaded in this view is empty, cancel any old
// requests and clear the
// currently loaded image.
if (TextUtils.isEmpty(mUrl)) {
if (mImageContainer != null) {
mImageContainer.cancelRequest();
mImageContainer = null;
}
setDefaultImageOrNull();
return;
}

// if there was an old request in this view, check if it needs to be
// canceled.
if (mImageContainer != null && mImageContainer.getRequestUrl() != null) {
if (mImageContainer.getRequestUrl().equals(mUrl)) {
// if the request is from the same URL, return.
return;
} else {
// if there is a pre-existing request, cancel it if it's
// fetching a different URL.
mImageContainer.cancelRequest();
setDefaultImageOrNull();
}
}

// The pre-existing content of this view didn't match the current URL.
// Load the new image
// from the network.
ImageContainer newContainer = mImageLoader.get(mUrl,
new ImageListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (mErrorImageId != 0) {
setImageResource(mErrorImageId);
}

if (mObserver != null) {
mObserver.onError();
}
}

@Override
public void onResponse(final ImageContainer response,
boolean isImmediate) {
// If this was an immediate response that was delivered
// inside of a layout
// pass do not set the image immediately as it will
// trigger a requestLayout
// inside of a layout. Instead, defer setting the image
// by posting back to
// the main thread.
if (isImmediate && isInLayoutPass) {
post(new Runnable() {
@Override
public void run() {
onResponse(response, false);
}
});
return;
}

int bWidth = 0, bHeight = 0;
if (response.getBitmap() != null) {

setImageBitmap(response.getBitmap());
bWidth = response.getBitmap().getWidth();
bHeight = response.getBitmap().getHeight();
adjustImageAspect(bWidth, bHeight);

} else if (mDefaultImageId != 0) {
setImageResource(mDefaultImageId);
}

if (mObserver != null) {
mObserver.onSuccess();

}
}
});

// update the ImageContainer to be the new bitmap container.
mImageContainer = newContainer;

}

private void setDefaultImageOrNull() {
if (mDefaultImageId != 0) {
setImageResource(mDefaultImageId);
} else {
setImageBitmap(null);
}
}

@Override
protected void onLayout(boolean changed, int left, int top, int right,
int bottom) {
super.onLayout(changed, left, top, right, bottom);
loadImageIfNecessary(true);
}

@Override
protected void onDetachedFromWindow() {
if (mImageContainer != null) {
// If the view was bound to an image request, cancel it and clear
// out the image from the view.
mImageContainer.cancelRequest();
setImageBitmap(null);
// also clear out the container so we can reload the image if
// necessary.
mImageContainer = null;
}
super.onDetachedFromWindow();
}

@Override
protected void drawableStateChanged() {
super.drawableStateChanged();
invalidate();
}

/*
* Adjusting imageview height
*/
private void adjustImageAspect(int bWidth, int bHeight) {
LinearLayout.LayoutParams params = (LayoutParams) getLayoutParams();

if (bWidth == 0 || bHeight == 0)
return;

int swidth = getWidth();
int new_height = 0;
new_height = swidth * bHeight / bWidth;
params.width = swidth;
params.height = new_height;
setLayoutParams(params);
}
}

如何让图片像常规的那样在 FeedImageView 类中以 16 百万像素显示

private ImageView imgPreview; 

教程使用的类?

最佳答案

设置

android:hardwareAccelerated="false"

&

android:largeHeap="true"

在 list 文件的应用程序标签内。

目前看来这可以正常工作。当我使用这些参数设置滚动图片时,动画有点断断续续。

<application
android:name="com.clxxxii.givenchy"
android:allowBackup="true"
android:hardwareAccelerated="false"
android:icon="@drawable/givenchy"
android:label="@string/app_name"
android:largeHeap="true"
android:theme="@style/CustomActionBarTheme" >

关于android - 位图太大而无法上传到纹理中(5312x2988,最大 = 4096x4096)- 如何解决此问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29063250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com