equal
deleted
inserted
replaced
73 { |
73 { |
74 return mMirrorImage; |
74 return mMirrorImage; |
75 } |
75 } |
76 |
76 |
77 |
77 |
78 void HgVgImage::setImage(QImage& image) |
78 void HgVgImage::setImage(const QImage& image) |
79 { |
79 { |
80 if (image.isNull()) |
80 if (image.isNull()) |
81 return; |
81 return; |
82 |
82 |
83 // release previous images vg data |
83 // release previous images vg data |
86 mQImage = image; |
86 mQImage = image; |
87 |
87 |
88 mMirrorSize = getMirrorSize(mQImage); |
88 mMirrorSize = getMirrorSize(mQImage); |
89 |
89 |
90 } |
90 } |
|
91 |
|
92 QImage HgVgImage::getQImage() const |
|
93 { |
|
94 return mQImage; |
|
95 } |
|
96 |
91 |
97 |
92 void HgVgImage::releaseImage() |
98 void HgVgImage::releaseImage() |
93 { |
99 { |
94 if (mVgImage != VG_INVALID_HANDLE) |
100 if (mVgImage != VG_INVALID_HANDLE) |
95 { |
101 { |
106 mQImage = QImage(); |
112 mQImage = QImage(); |
107 } |
113 } |
108 |
114 |
109 void HgVgImage::upload(bool mirror) |
115 void HgVgImage::upload(bool mirror) |
110 { |
116 { |
|
117 if( mQImage.isNull()) |
|
118 return; |
111 |
119 |
112 if (mVgImage == VG_INVALID_HANDLE) |
120 if (mVgImage == VG_INVALID_HANDLE) |
113 { |
121 { |
114 |
122 |
115 VGImageFormat format; |
123 VGImageFormat format; |
138 { |
146 { |
139 qWarning("HgMediaWall run out of video memory for images!"); |
147 qWarning("HgMediaWall run out of video memory for images!"); |
140 return; |
148 return; |
141 } |
149 } |
142 |
150 |
143 vgImageSubData(mVgImage, mQImage.bits(), mQImage.bytesPerLine(), |
151 // bits function performs deep copy if we dont fetch data with const specifier. |
144 format, 0, 0, mQImage.width(), mQImage.height() ); |
152 const uchar *bits = mQImage.bits(); |
|
153 |
|
154 vgImageSubData(mVgImage, bits, mQImage.bytesPerLine(), |
|
155 format, 0, 0, mQImage.width(), mQImage.height() ); |
|
156 |
145 } |
157 } |
146 |
158 |
147 if (mirror && mMirrorImage == VG_INVALID_HANDLE) |
159 if (mirror && mMirrorImage == VG_INVALID_HANDLE) |
148 { |
160 { |
149 mMirrorImage = vgCreateImage(VG_sARGB_8888_PRE, mMirrorSize.width(), mMirrorSize.height(), VG_IMAGE_QUALITY_NONANTIALIASED); |
161 mMirrorImage = vgCreateImage(VG_sARGB_8888_PRE, mMirrorSize.width(), mMirrorSize.height(), VG_IMAGE_QUALITY_NONANTIALIASED); |
160 // it fades under the floor |
172 // it fades under the floor |
161 for (int i = 0; i < mirrorImage.height(); i++) |
173 for (int i = 0; i < mirrorImage.height(); i++) |
162 { |
174 { |
163 qreal t = qreal(i) / qreal(mirrorImage.height()); |
175 qreal t = qreal(i) / qreal(mirrorImage.height()); |
164 int a = (int)(t * 255.0); |
176 int a = (int)(t * 255.0); |
|
177 uchar* scanline = mirrorImage.scanLine(i); |
165 for (int j = 0; j < mirrorImage.width(); j++) |
178 for (int j = 0; j < mirrorImage.width(); j++) |
166 { |
179 { |
167 QRgb rgb = mirrorImage.pixel(j, i); |
180 scanline[j*4+3] = a; |
168 mirrorImage.setPixel(j, i, qRgba(qRed(rgb), qGreen(rgb), qBlue(rgb), a)); |
|
169 } |
181 } |
170 } |
182 } |
171 |
183 |
172 // copy data to vg image |
184 // copy data to vg image |
173 vgImageSubData(mMirrorImage, mirrorImage.bits(), mirrorImage.bytesPerLine(), |
185 vgImageSubData(mMirrorImage, mirrorImage.bits(), mirrorImage.bytesPerLine(), |