Ich versuche, Bilder von meiner Testgeräte-Kamerarolle als Miniaturbilder zu rendern. Ich habe die Bilder erfolgreich von der Kamerarolle geholt und sie in einer Reihe von Bildelementen in einer Listenansicht angezeigt, aber das Laden dauert sehr lange. Außerdem lese ich in den React Native-Dokumenten, dass das Image-Element die Datei auswählen wird Korrekte Bildgröße für den Raum, in den es gerendert wird.React Native - So erhalten Sie Kamera-Roll-Thumbnails anstelle von Bildern in voller Größe
Dies ist aus der Dokumentation.
iOS speichert mehrere Größen für das gleiche Bild in der Kamerarolle, es ist sehr wichtig, aus Gründen der Leistung eine auszuwählen, die so nah wie möglich ist. Sie möchten nicht das volle 3264 x 2448-Bild als Quelle verwenden, wenn Sie eine 200 x 200-Miniaturansicht anzeigen. Wenn es eine genaue Übereinstimmung gibt, wird sie von React Native ausgewählt, andernfalls wird die erste verwendet, die mindestens 50% größer ist, um Unschärfe bei der Größenänderung zu vermeiden. All dies geschieht standardmäßig, sodass Sie sich keine Gedanken darüber machen müssen, wie Sie den langwierigen (und fehleranfälligen) Code selbst erstellen können. https://facebook.github.io/react-native/docs/image.html#best-camera-roll-image
Der Code, den ich verwende, um die Bilder zu lesen, ist super einfach.
CameraRoll.getPhotos({
first: 21,
assetType: 'Photos'
}, (data) => {
console.log(data);
var images = data.edges.map((asset) => {
return {
uri: asset.node.image.uri
};
});
this.setState({
images: this.state.images.cloneWithRows(images)
});
},() => {
this.setState({
retrievePhotoError: messages.errors.retrievePhotos
});
});
Und dann um es zu rendern habe ich diese Funktionen.
renderImage(image) {
return <Image resizeMode="cover" source={{uri: image.uri}} style={[{
height: imageDimensions, // imageDimensions == 93.5
width: imageDimensions
}, componentStyles.thumbnails]}/>;
},
render() {
<ListView
automaticallyAdjustContentInsets={false}
contentContainerStyle={componentStyles.row}
dataSource={this.state.images}
renderRow={this.renderImage}
/>
}
Was fehlt mir hier? Ich werde verrückt!!!
kommst du mit JavaScript-Lösung noch heraus? –