Commit d30340bd authored by twanvl's avatar twanvl

hack to fix completely transparent images

parent 85eae645
......@@ -141,28 +141,10 @@ void resample_and_clip(const Image& img_in, Image& img_out, wxRect rect) {
// ----------------------------------------------------------------------------- : Aspect ratio preserving
// fill an image with 100% transparent, except for the given rectangle
void fill_transparent(Image& img, int dx, int dy, int w, int h) {
// fill an image with 100% transparent
void fill_transparent(Image& img) {
if (!img.HasAlpha()) img.InitAlpha();
memset(img.GetAlpha(), 0, img.GetWidth() * img.GetHeight());
/*/?
int iw = img.GetWidth(), ih = img.GetHeight();
Byte* data = img.GetAlpha();
// fill
int y = 0;
for (; y < dy ; ++y) {
for (int x = 0 ; x < iw ; ++x) *data++ = 0;
}
for (; y < dy + h ; ++y) {
int x = 0;
for (; x < dx ; ++x) *data++ = 0;
for (; x < dx + w ; ++x) *data++ = 255;
for (; x < iw ; ++x) *data++ = 0;
}
for (; y < ih ; ++y) {
for (int x = 0 ; x < iw ; ++x) *data++ = 0;
}
*/
}
void resample_preserve_aspect(const Image& img_in, Image& img_out) {
......@@ -175,10 +157,11 @@ void resample_preserve_aspect(const Image& img_in, Image& img_out) {
int dx = (img_out.GetWidth() - rwidth) / 2;
int dy = (img_out.GetHeight() - rheight) / 2;
// transparent background
fill_transparent(img_out, dx, dy, rwidth, rheight);
fill_transparent(img_out);
// resample
int offset_out = dx + img_out.GetWidth() * dy;
Image img_temp(rwidth, img_in.GetHeight(), false);
img_temp.InitAlpha();
resample_pass(img_in, img_temp, 0, 0, img_in.GetWidth(), 1, rwidth, 1, img_in.GetHeight(), img_in.GetWidth(), img_temp.GetWidth());
resample_pass(img_temp, img_out, 0, offset_out, img_in.GetHeight(), img_temp.GetWidth(), rheight, img_out.GetWidth(), rwidth, 1, 1);
}
......@@ -51,6 +51,27 @@ void ChoiceThumbnailRequest::store(const Image& img) {
il->Add(wxBitmap(16,16),*wxBLACK);
}
if (img.Ok()) {
#ifdef __WXMSW__
// for some reason windows doesn't like completely transparent images if they do not have a mask
// HACK:
if (img.GetWidth() == 16 && img.GetHeight() == 16) {
// is the image empty?
bool empty = true;
int* b = (int*)img.GetAlpha();
int* e = b + 16*16/sizeof(int);
while (b != e) {
if (*b++) {
empty = false;
break;
}
}
// if so, use a mask instead
if (empty) {
const_cast<Image&>(img).ConvertAlphaToMask();
}
}
// Hack ends here
#endif
if (id == il->GetImageCount()) {
il->Add(img);
} else {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment